我将我的用例剥离到这 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
所以我怀疑这与使用$()
有关。我该如何解决我的问题?
最佳答案
在赋值中使用圆括号,使其被视为一个数组,而不是一个带空格的长字符串:
A=$(echo "spam egg")
echo ${A[0]}
-> 垃圾邮件鸡蛋
A=($(echo "spam egg"))
echo ${A[0]}
-> 垃圾邮件
(告诉 bash 运行命令的 $()
的括号也不算告诉它以数组形式收集结果。)
关于arrays - 为什么 Bash 不用新数组覆盖我的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40533415/