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