我不确定这是否已经得到了解答,我看起来并没有发现任何看起来像我正在尝试做的事情。我还把它发布到了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>
有什么想法吗?
答案 0 :(得分:1)
鉴于断言该函数的ksh
部分正常工作,只需要创建bash
部分。以下应该起作用,我相信,它是安全和稳健的(尽管欢迎相反的证据)。
eval $ARRAY_NAME+=\(\"\$VARIABLE_VALUE\"\)
首次扩展只会扩展$ARRAY_NAME
以获得
eval array+=("$VARIABLE_VALUE")
然后eval
会导致再次正常评估。