在 bash 中拆分列表
Splitting a list in bash
我有这个脚本:
#!/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
不是数组。
我在使用以下代码时遇到此错误:
redhatCatalogs=("certified-operators" "redhat-marketplace")
for catalog in ${redhatCatalogs[@]}; do
...
注意我遗漏了引号,添加引号后,问题解决了:
redhatCatalogs=("certified-operators" "redhat-marketplace")
for catalog in "${redhatCatalogs[@]}"; do
...
所以总而言之,还要考虑引号!:"${redhatCatalogs[@]}"
我有这个脚本:
#!/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
不是数组。
我在使用以下代码时遇到此错误:
redhatCatalogs=("certified-operators" "redhat-marketplace")
for catalog in ${redhatCatalogs[@]}; do
...
注意我遗漏了引号,添加引号后,问题解决了:
redhatCatalogs=("certified-operators" "redhat-marketplace")
for catalog in "${redhatCatalogs[@]}"; do
...
所以总而言之,还要考虑引号!:"${redhatCatalogs[@]}"