Bashでは変数に格納された文字列をほかの変数名とみなしてアクセスすることが可能
#!/bin/bash
BASE="Apple"
echo ${BASE}
REF="BASE"
echo ${REF}
echo ${!REF}
このスクリプトの出力結果は以下のとおり。
~$./ref.sh
Apple
BASE
Apple
Apple
BASE
Apple
ただし、問題がひとつ、配列の場合は期待した結果が得られない。
#!/bin/bash
BASE=("Apple" "Orange" "Grape")
echo ${BASE[@]}
REF="BASE"
echo ${REF}
echo ${!REF[@]}
~$./ref_arrey.sh
Apple Orange Grape
BASE
0
Apple Orange Grape
BASE
0
これを解決するためにはevalを使用する。
#!/bin/bash
BASE=("Apple" "Orange" "Grape")
echo ${BASE[@]}
REF="BASE"
echo ${REF}
eval REF_ARRAY="\${${REF}[@]}"
echo ${REF_ARRAY}
~$./ref_arrey.sh
Apple Orange Grape
BASE
Apple Orange Grape
Apple Orange Grape
BASE
Apple Orange Grape
あんまりきれいな解決法じゃないなぁ。
0 件のコメント:
コメントを投稿