Een*_*oku 3 bash array bash-expansion
我有一个数组
declare -a arr0=("'1 2 3'" "'4 5 6'")
Run Code Online (Sandbox Code Playgroud)
和一个变量
x=0
Run Code Online (Sandbox Code Playgroud)
然后我用数组的名称创建新变量
tmp="arr$x"
Run Code Online (Sandbox Code Playgroud)
我希望能够像这样扩展arr0
这个tmp
变量的内容
newArr=( "${!tmp}" )
Run Code Online (Sandbox Code Playgroud)
并newArr
像普通数组一样使用,例如使用索引等。
但是当我现在尝试打印时,它看起来像这样:
$ echo ${newArr[@]}
'1 2 3'
Run Code Online (Sandbox Code Playgroud)
只存储了第一个元素,我不知道如何修复它。
我也试过newArr
像这样创建
newArr=( "${!tmp[@]}" )
Run Code Online (Sandbox Code Playgroud)
但更糟糕的是 - 只打印了 0。
$ echo ${newArr[@]}
0
Run Code Online (Sandbox Code Playgroud)
那么,您知道如何使用数组,如果其名称存储在其他变量中吗?
可以使用eval:
$ 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
$
Run Code Online (Sandbox Code Playgroud)
以 echo 开头的命令是为了说明,eval 是危险的。
请注意,以上不保留稀疏数组的数组索引。