配列名から配列の内容を拡張するには? [コピー]

配列名から配列の内容を拡張するには? [コピー]

配列があります

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は危険です。

上記は希少配列の配列インデックスを保持しません。

おすすめ記事