使用变量作为数组名称在bash中创建数组

时间:2015-03-10 15:45:52

标签: arrays linux bash shell

我不确定这是否已经得到了解答,我看起来并没有发现任何看起来像我正在尝试做的事情。我还把它发布到了stackexchange(https://unix.stackexchange.com/questions/189293/create-array-in-bash-with-variables-as-array-name

我有许多shell脚本能够针对ksh或bash shell运行,并且它们使用数组。我创建了一个名为“setArray”的函数,它询问正在运行的shell并确定用于创建数组的内置函数 - 对于ksh,set -A,对于bash,typeset -a。但是,我在bash部分遇到了一些问题。

该函数有两个参数,即数组的名称和要添加的值。然后变为$ {ARRAY_NAME}和$ {VARIABLE_VALUE}。执行以下操作:

set -A $(eval echo \${ARRAY_NAME}) $(eval echo \${${ARRAY_NAME}[*]}) "${VARIABLE_VALUE}"

在ksh中完美运行。然而,

typeset -a $(eval echo \${ARRAY_NAME})=( $(eval echo \${${ARRAY_NAME}[*]}) "${VARIABLE_VALUE}" )

没有。这提供了

bash: syntax error near unexpected token '('

我知道我可以把它作为一个字符串列表(例如MYARRAY =“一二三”)并使用IFS循环它,但我不想失去使用数组的能力。< / p>

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

鉴于断言该函数的ksh部分正常工作,只需要创建bash部分。以下应该起作用,我相信,它是安全和稳健的(尽管欢迎相反的证据)。

eval $ARRAY_NAME+=\(\"\$VARIABLE_VALUE\"\)

首次扩展只会扩展$ARRAY_NAME以获得

eval array+=("$VARIABLE_VALUE")

然后eval会导致再次正常评估。