为什么Bash不用新的数据覆盖我的数组?

时间:2016-11-10 17:13:31

标签: arrays bash overwrite

我将我的用例剥离到这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

所以我怀疑它与使用$()有关。我怎样才能解决我的问题?

1 个答案:

答案 0 :(得分:4)

在赋值中使用括号,以便将其视为数组,而不是带有空格的一个长字符串:

A=$(echo "spam egg")
echo ${A[0]}

- > spam egg

A=($(echo "spam egg"))
echo ${A[0]}

- > spam

(告诉bash运行命令的$()的括号也不会指望它将结果作为数组收集。)