我将我的用例剥离到这3行(加上输出):
A=(foo bar)
A=$(echo "spam egg")
echo ${A[@]}
spam egg bar
它创建一个手工编写的两个元素的数组。然后一段时间后,我想用命令行工具(例如ls *.vhd
)的输出替换我的数组。 Bash只替换第一个元素,而不是替换数组,因此bar在末尾“附加”。
如果我使用另一个手写数组,那么我就无法重现这种行为。
A=(foo bar)
A=(spam egg)
echo ${A[@]}
spam egg
所以我怀疑它与使用$()
有关。我怎样才能解决我的问题?
答案 0 :(得分:4)
在赋值中使用括号,以便将其视为数组,而不是带有空格的一个长字符串:
A=$(echo "spam egg")
echo ${A[0]}
- > spam egg
A=($(echo "spam egg"))
echo ${A[0]}
- > spam
(告诉bash运行命令的$()
的括号也不会指望它将结果作为数组收集。)