【问题标题】:Bash array declaration and appendationBash 数组声明和附加
【发布时间】:2017-02-03 11:36:01
【问题描述】:

我正在尝试在 bash 脚本中声明并附加到一个数组,搜索后我得到了这段代码。

list=()
list+="string"

但是当我把它回显出来时,它什么都没有。 我也试过像这样追加到数组中

list[$[${#list[@]}+1]]="string"

我不明白为什么这不起作用,有人有什么建议吗?


编辑: 问题是列表被附加到一个while循环中。

list=()

git ls-remote origin 'refs/heads/*' | while read sha ref; do
    list[${#list[@]}+1]="$ref"
done

declare -p list

请参阅 stackoverflow.com/q/16854280/1126841

【问题讨论】:

  • 你是如何回应的?
  • 我试过'echo "${list}"'、'echo "$list"'和'echo $list'
  • 尝试列表+=('foo')
  • $[...] 已过时(使用 $((...)) 代替)且不必要;常规数组的索引在算术上下文中自动评估,因此list[${#list[@]}+1]="string" 就足够了。

标签: arrays bash append declare


【解决方案1】:

您可以像这样将新字符串附加到您的数组中:

#!/bin/bash

mylist=("number one")

#append "number two" to array    
mylist=("${mylist[@]}" "number two")

# print each string in a loop
for mystr in "${mylist[@]}"; do echo "$mystr"; done

更多信息可以查看http://wiki.bash-hackers.org/syntax/arrays

【讨论】:

  • OP 已经在使用正确的运算符来追加到数组;这不会有什么不同。
【解决方案2】:

Ali Okan Yüksel 已经为您提到的在数组中添加项目的第一种方法写下了答案。

list+=( newitem  another_new_item ··· )

你提到的第二种方法的正确方法是:

list[${#list[@]}]="string"

假设 非稀疏 数组具有 N 项,并且因为 bash 数组索引从 0 开始,所以数组中的最后一项是 N-1th。因此下一项必须添加到N 位置(${#list[@]});不一定像你写的那样在N+1

相反,如果使用 sparse 数组,则提供数组索引的bash parameter expansion 非常有用:

${!list[@]}

例如,

$ list[0]=3
$ list[12]=32
$ echo ${#list[@]}
2
$ echo ${!list[@]}
0 12

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2015-05-08
    • 1970-01-01
    • 2014-05-23
    • 2013-05-05
    • 2020-04-02
    相关资源
    最近更新 更多