我有一个存储在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
提前谢谢。
答案 0 :(得分:2)
没有。数组中的值(无论是索引还是关联)只能是字符串。它有助于将bash
数组视为数据结构,而将第二级引用视为
args=("foo bar" "baz")
mycommand "${args[@]}"
将两个参数(而不是三个)传递给mycommand
。在这种情况下,不需要嵌套,因为命令只能将字符串而不是数组作为参数。