Bash:附加到具有变量名称的列表

时间:2014-04-09 03:16:24

标签: bash shell

前三个命令有效,但第四个没有。如何附加名称中包含变量的数组?

i=4
eval pim$i=
pim4+=(`date`)

pim$i+=(`date`)

谢谢!

1 个答案:

答案 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)