我有这个脚本:
#!/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
忽略这个?
最佳答案
这不是数组:
list="a b c d"
您只是将
list
分配给长度为 7 的字符串。使它成为一个真正的数组:
list=(a b c d)
然后使用
for item in "${list[@]}"
,您会得到正确的结果。对于您更新的问题,您应该只使用
$list
而不是 ${list[@]}
,因为 list
不是数组。
关于bash - 在 bash 中拆分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53921672/