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手册页会发现这并不符合预期,因为最后一行只是返回“数组”的索引$_LIST
(根本不是数组)。
在任何情况下,都应执行以下操作(如前所述):
LIST=($(eval echo \${$_LIST[*]}))
或...(最终我走的路线):
LIST_lys="lys1 lys2"
...
LIST=(${!_LIST})
当然,假设元素不包含空格。
[@]
到指针_LIST="LIST_${whichone}[@]"
,然后LIST=("${!_LIST}")
用于复制数组。最好使用小写的变量名,以避免与环境变量(全大写)冲突。