arrays - bash 递增地添加到数组

标签 arrays bash indexing parameter-passing whitespace

考虑下面的代码

#! /bin/bash

declare -a input # unnecessary
declare -a bad
declare -a good # unnecessary

input=('alpha 23' 'bravo 79' 'charlie 12')
echo "input is " ${#input[@]} "long"
for x in "${input[@]}"
do
    bad=$x
    good[ ${#good[@]} ]=$x
    echo 
    echo "added '$x', good is now " ${#good[@]} "long, bad is still " ${#bad[@]} "long"
done

输出是

input is  3 long

added 'alpha 23', good is now  1 long, bad is still  1 long

added 'bravo 79', good is now  2 long, bad is still  1 long

added 'charlie 12', good is now  3 long, bad is still  1 long

根据 bash 的手册页...“当分配给索引数组时,如果提供了可选的括号和下标,则该索引被分配给;否则分配的元素的索引是最后一个索引由语句加一分配给。索引从零开始。“

我显然不理解粗体部分,因为我希望语句“bad=$x”在每次执行时自动递增索引。它不会并且每次都分配给 bad[0]。

为什么它没有按照我的预期进行,是否有比我分配给 good[ .. ] 的笨拙行更好的编写代码的方法

最佳答案

您引用的部分与分配有关,而不是加法:

array=([0]=zero [1]=one [2]=two)

相当于

array=([0]=zero one two)

事实上,这与

array=(zero one two)

要添加到数组,请使用 +=:

array+=(three)

关于arrays - bash 递增地添加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935353/

相关文章:

c - 传递方法参数时防止数组越界

javascript - 更快地找到具有频率值的二维关键字数组的出现

python - Shell脚本不在后台执行所有命令

速记增量符号的 Bash 退出状态

mysql - 如何让 MySQL 使用 INDEX 进行 View 查询?

arrays - 从子数组中找到文件?

Java 将字符串数组转换为列表

zsh - 在 zshrc 中创建临时别名

mysql - 在 mysql 中为键集分页建立索引

matlab - 如何将元胞数组分配给多个矩阵?