Bash:关联数组的值可以是数组吗?它的语法是什么?

时间:2014-10-27 18:22:00

标签: bash shell arrays

我有一个存储在bash文件中的关联数组,并且我希望所述关联数组的值是数组,但我甚至不知道这是否可能:

我们说我的文件/tmp/conf.bash包含:

declare -A ASSOCIATIVE=( ["foo"]=( "bar" "baz" ) ) 当我尝试加载它时(使用source /tmp/conf.bash),我得到:

borrajax@wharrgarbl:~# source /tmp/conf.bash bash: /tmp/conf.bash: line 2: syntax error near unexpected token `(' bash: /tmp/conf.bash: line 2: ` ["foo"]=( "bar" "baz" )' bash: /tmp/conf.bash: line 3: syntax error near unexpected token `)' bash: /tmp/conf.bash: line 3: ` )'

但是,如果我制作文件:

declare -A ASSOCIATIVE=(
    ["foo"]="bar baz"
 )

它正常工作:

borrajax@wharrgarbl:~# source /tmp/conf.bash
borrajax@hwharrgarbl:~# for key in "${!ASSOCIATIVE[@]}"; do \
                        echo "key: $key; values: ${ASSOCIATIVE[$key]}"; \
                        done
key: foo; values: bar baz

有没有办法在Bash脚本中指定值是数组?

一种可能性是将关联数组的值设置为以逗号分隔的字符串,然后将它们拆分成数组,但我想也许有一种格式化bash文件的方法,这样就不需要步骤。

我正在使用Bash 4.2.28

提前谢谢。

1 个答案:

答案 0 :(得分:2)

没有。数组中的值(无论是索引还是关联)只能是字符串。它有助于将bash数组视为数据结构,而将第二级引用视为

args=("foo bar" "baz")
mycommand "${args[@]}"

将两个参数(而不是三个)传递给mycommand。在这种情况下,不需要嵌套,因为命令只能将字符串而不是数组作为参数。