我在脚本上运行了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
答案 0 :(得分:2)
在较长的字符串中包含一个@
索引数组会导致一些奇怪的结果:
$ arr=(a b c)
$ printf '%s\n' "Hi there ${arr[@]}"
Hi there a
b
c
之所以会这样,是因为${arr[@]}
的引号扩展是一系列分开的单词,printf
一次将使用一个单词。第一个单词a
以Hi there
结尾(就像数组后面的任何内容都将附加到c
一样。)
当数组扩展是较大字符串的一部分时,几乎可以肯定,您希望扩展是单个单词。
$ printf '%s\n' "Hi there ${arr[*]}"
Hi there a b c
使用echo
几乎没有关系,因为您可能不在乎echo
是接收一个还是多个参数。