我有这个脚本:
#!/bin/bash
list="a b c d"
for item in ${list[@]}; do
echo "${item}"
done
当我运行它时,这是输出:
a
b
c
d
这正是我想要的。但是,shellcheck
讨厌这一点并抛出错误:
for item in ${list[@]}; do
^-- SC2068: Double quote array expansions to avoid re-splitting elements.
但是,当我用双引号将该变量输出时,脚本的输出将变为:
a b c d
不是我想要的东西。
shellcheck是否正确,我是否应该修改尝试从变量中提取项目的方式,但是如何?还是我应该告诉shellcheck
忽略它?
答案 0 :(得分:5)
这不是数组:
list="a b c d"
您只是将list
分配给长度为7的字符串。
使其成为一个真实的数组:
list=(a b c d)
然后使用for item in "${list[@]}"
,您将获得正确的结果。
对于更新后的问题,您应该只使用$list
而不是${list[@]}
,因为list
不是数组。