Arrays 最佳实践:在bash脚本中打印数组
我在脚本上运行了Arrays 最佳实践:在bash脚本中打印数组,arrays,bash,unix,scripting,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[@]}" 打印数组中的元素哪种做法
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[@]}"
或
在较长的字符串中包含一个
@
-索引数组可能会导致一些奇怪的结果:
$ arr=(a b c)
$ printf '%s\n' "Hi there ${arr[@]}"
Hi there a
b
c
这是因为${arr[@]}
的引号扩展是一系列单独的单词,而printf
将一次使用一个单词。第一个单词a
在前面加上Hi
(就像数组后面的任何内容都会附加到c
)
当数组扩展是较大字符串的一部分时,您几乎肯定希望扩展为单个单词
$ printf '%s\n' "Hi there ${arr[*]}"
Hi there a b c
对于
echo
,这无关紧要,因为您可能不在乎echo
是否接收到一个或多个参数。谢谢!这澄清了我的疑问。
$ printf '%s\n' "Hi there ${arr[*]}"
Hi there a b c