arrays - 在 bash 中将元素追加到数组

标签 arrays bash

我尝试使用 += 运算符在 bash 中附加数组,但不知道为什么它不起作用

#!/bin/bash

i=0
args=()
while [ $i -lt 5 ]; do
    args+=("${i}")
    echo "${args}"
    let i=i+1
done

预期结果

0
0 1
0 1 2
0 1 2 3
0 1 2 3 4

实际结果

0
0
0
0
0

最佳答案

它确实有效,但您只是回显数组的第一个元素。改用这个:

echo "${args[@]}"

Bash 的数组语法令人困惑。使用 ${args[@]} 获取数组的所有元素。使用 ${args} 相当于 ${args[0]},它获取第一个元素(索引 0 处)。

参见ShellCheck : Expanding an array without an index only gives the first element.

顺便说一句,您还可以将 let i=i+1 简化为 ((i++)),但使用 C 风格 for< 更简单 循环。而且您在添加之前不需要定义 args

所以:

#!/bin/bash
for ((i=0; i<5; ++i)); do
    args+=($i)
    echo "${args[@]}"
done

关于arrays - 在 bash 中将元素追加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55316852/

相关文章:

bash - OpenSSL 解密 AES 256 位(base64)加密密码 - 错误的最终 block 长度

linux - 如何通过脚本列出 Bash 中的目录和文件?

bash - 使用ssh将bash命令传递到远程主机

python - 在 Linux 中 grep 列出文件中另一百万条记录中的 1000 条记录的最快方法

linux - 如何在不压缩或归档的情况下将目录拆分为多个部分?

c# - : List<T>. Add() 或 System.Array.Resize() 哪个更有效?

java - 有什么有效的方法来确定 boolean 数组中是否有更多 N 个连续 true ? java 语

php - 使用二进制搜索 PHP 查找数组中最后一次出现的元素的索引

Java,分页数组

c++ - 一个简约的智能数组(容器)类模板