最佳实践:在bash脚本中打印数组

时间:2019-03-13 19:14:30

标签: arrays bash unix scripting

我在脚本上运行了shellcheck,在非常简单的方面遇到了错误-

  

echo“已删除的字段列表:$ {deleted [@]}”
                                 ^ ----------- ^ SC2145:参数将字符串和数组混合在一起。使用*或单独的参数。

我正在尝试执行以下类似行为-

declare -a  deleted
deleted = ("some.id.1" "some.id.22" "some.id.333")
echo "List of fields deleted: ${deleted[@]}"

哪种更好的做法是打印数组中的元素?

echo "List of fields deleted: ${deleted[@]}"

OR

echo "List of fields deleted: "
 for deletedField in "${deleted[@]}"; do echo "${deletedField}"; done

1 个答案:

答案 0 :(得分:2)

在较长的字符串中包含一个@索引数组会导致一些奇怪的结果:

$ arr=(a b c)
$ printf '%s\n' "Hi there ${arr[@]}"
Hi there a
b
c

之所以会这样,是因为${arr[@]}的引号扩展是一系列分开的单词,printf一次将使用一个单词。第一个单词aHi there结尾(就像数组后面的任何内容都将附加到c一样。)

当数组扩展是较大字符串的一部分时,几乎可以肯定,您希望扩展是单个单词。

$ printf '%s\n' "Hi there ${arr[*]}"
Hi there a b c

使用echo几乎没有关系,因为您可能不在乎echo是接收一个还是多个参数。