【问题标题】:Bash: How to declare empty array, and then add variables to itBash:如何声明空数组,然后向其中添加变量
【发布时间】:2020-03-30 23:02:11
【问题描述】:

我希望一个比我聪明的好心人能帮助我。

我正在编写一个 Bash 脚本,其中有一个 for 循环,该循环将循环未知/未定义的次数。

现在,在这个for 循环中,将有一个值分配给一个变量。我们称这个变量为:$var1

每次循环执行时(我永远不知道执行了多少次),我想将$var1 中的值分配给一个数组,并在执行过程中慢慢构建数组。让我们调用数组$arr

这是我目前所拥有的:

for i in $( seq 0 $unknown ); do
    ...
    some commands that will make $var1 change...
    ...

    arr=("${arr[@]}" "$var1")
done

但是,当我想回显或使用数组 $arr 中的值时,我没有得到任何结果

也许有人会在正确的方向上帮助我?

非常感谢。

【问题讨论】:

  • arr+=("$var1") 将填充循环内的数组,如果你真的想在循环之前/外定义一个空数组,arr=() 或 declare -a arr
  • 向我们展示您如何尝试使用数组中的值,并确保您提供的不是伪代码,而是我们可以自己运行的工作示例,无需进行任何更改即可查看您的问题(如minimal reproducible example 定义中所述)。
  • 顺便说一句,一般来说,for i in $(seq 0 $unknown) 最好写成for ((i=0; i<unknown; i++))。 seq 不是标准化命令或 shell 本身的一部分,在不需要时运行外部命令通常效率低下。 (符合 POSIX 的替代方案更冗长:i=0; while [ "$i" -lt 10 ]; do ...; i=$((i + 1)); done——ksh 和 bash 提供更短的形式是有原因的)。
  • 谢谢,查尔斯·达菲。我边走边学……
  • 我已投票决定重新打开它 - 在我看来,虽然提议的欺骗与数组相关,但它完全不同 i> 关于为什么echo ${arr} 只给出第一个元素的问题。

标签: arrays linux bash


【解决方案1】:

您声明并添加到bash 数组,如下所示:

declare -a  arr       # or arr=()
arr+=("item1")
arr+=("item2")

就这么简单。

执行该代码后,以下断言(以及其他)为真:

${arr[@]}  == item1 item2
${#arr[@]} == 2
${arr[1]}  == item2

就您提供的代码而言,您将使用:

declare -a arr
for i in $( seq 0 $unknown ); do
    ...
    some commands that will make $var1 change...
    ...

    arr+=("$var1")
done

【讨论】:

    猜你喜欢
    • 2021-01-16
    • 1970-01-01
    • 2011-09-27
    • 2011-03-05
    • 2017-06-25
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多