在 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[@]}"