Bashのマニュアルページで${!a}
は、名前の内容a
(間接参照のレベル)である変数の内容を返すためのの使用について説明しています。
これを使用して配列内のすべての要素を返す方法を知りたい、つまり、
a=(one two three)
echo ${a[*]}
戻り値
one two three
私がしたい:
b=a
echo ${!b[*]}
同じを返すために。残念ながら、そうではありませんが、0
代わりに戻ります。
更新
返答を考えると、私の例はもちろん次のようなものなので、単純すぎることに気づきました。
b=("${a[@]}")
私が必要と言ったことを正確に達成します。
だから、これが私がやろうとしていたことです:
LIST_lys=(lys1 lys2)
LIST_diaspar=(diaspar1 diaspar2)
whichone=$1 # 'lys' or 'diaspar'
_LIST=LIST_$whichone
LIST=${!_LIST[*]}
もちろん、Bashのmanページを注意深く読むと、最後の行が単に$_LIST
(配列ではなく)「配列」のインデックスを返すため、これは期待どおりに機能しないことがわかります。
いずれにせよ、(指摘されたように)次の作業を行う必要があります。
LIST=($(eval echo \${$_LIST[*]}))
または...(最終的に私が行ったルート):
LIST_lys="lys1 lys2"
...
LIST=(${!_LIST})
もちろん、その要素に空白が含まれていないと仮定します。
[@]
ポインタに追加し_LIST="LIST_${whichone}[@]"
、を使用LIST=("${!_LIST}")
して配列をコピーします。環境変数(すべて大文字)との競合を避けるために、小文字の変数名を使用することをお勧めします。