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

标签 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

所以我怀疑这与使用$()有关。我该如何解决我的问题?

最佳答案

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

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

-> 垃圾邮件鸡蛋

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

-> 垃圾邮件

(告诉 bash 运行命令的 $() 的括号也不算告诉它以数组形式收集结果。)

关于arrays - 为什么 Bash 不用新数组覆盖我的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40533415/

相关文章:

linux - debian linux sed无法正确地附加字符串/单词

linux - Bash,按值引用数组?

regex - Linux命令替换标准输入中没有 '\n'的字符

ios - 快速地,有没有办法从第二个 Realm 包添加新数据,而不覆盖当前默认 Realm 中的任何现有数据?

arrays - Coldfusion独特 list

php - 计算数组中具有给定值的值的数量

arrays - ActionScript 3 : Identifying an array element to delete when the elements are objects/class instances

c - 如何在 C 中连接两个字节数组?

c++ - 我的数组值如何被覆盖

php - foreach 循环后数组被覆盖