前三个命令有效,但第四个没有。如何附加名称中包含变量的数组?
i=4
eval pim$i=
pim4+=(`date`)
pim$i+=(`date`)
谢谢!
答案 0 :(得分:3)
使用bash 4.3,有一个针对此用例的功能:namerefs,使用declare -n
访问。 (如果你有一个现代的ksh
,它们也可以使用内置的nameref
declare -n pim_cur="pim$i"
pim_cur+=( "$(date)" )
使用bash 4.2,您可以使用printf -v
分配给数组元素:
array_len=${#pim4[@]}
printf -v "pim4[$array_len]" %s "$(date)"
在bash 4.2之前,您可能需要使用eval;使用printf %q
预处理数据可以确保安全:
printf -v safe_date '%q' "$(date)"
eval "pim$i+=( $safe_date )" # only safe if you can guarantee $i to only contain
# characters valid inside a variable name (such as
# numbers)