配列があります
declare -a arr0=("'1 2 3'" "'4 5 6'")
そして変数
x=0
次に、配列名で新しい変数を作成します。
tmp="arr$x"
arr0
この変数の内容を次のように拡張したいと思います。tmp
newArr=( "${!tmp}" )
newArr
たとえば、索引付けなどを使用して通常の配列のように使用されます。
しかし、今印刷しようとすると、次のようになります。
$ echo ${newArr[@]}
'1 2 3'
最初の要素だけが保存されますが、どのように変更するのかわかりません。
newArr
私もこのようにしてみました
newArr=( "${!tmp[@]}" )
しかし、もっと悪いのは、ゼロだけが印刷されるということです。
$ echo ${newArr[@]}
0
もしそうなら、配列の名前が別の変数に格納されている場合、配列の使用方法を知っていますか?
ベストアンサー1
これは可能です評価する:
$ declare -a array=( 1 2 3 4 )
$ echo "${array[@]}"
1 2 3 4
$ p=ay
$ tmp=arr$p
$ echo "$tmp"
array
$ echo "\${${tmp}[@]}"
${array[@]}
$ echo "newarray=(\"\${${tmp}[@]}\")"
newarray=("${array[@]}")
$ eval "newarray=(\"\${${tmp}[@]}\")"
$ echo "${newarray[@]}"
1 2 3 4
$
echoで始まるコマンドは参照用であり、evalは危険です。
上記は希少配列の配列インデックスを保持しません。