bash - 在 bash 中拆分列表

标签 bash shellcheck

我有这个脚本:

#!/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/

相关文章:

bash - 如何明确故意分词?

bash - 如何从 bash 脚本中使用 ssh?

bash - 如何从 bash 脚本并行运行多个程序?

linux - 使用 inotify-tools 作为守护进程处理数据

bash - 是否可以在使用位置变量时解析 SC2001 ("See if you can use ${variable//search/replace} instead")?

bash - ShellCheck 警告 : "Iterating over ls output is fragile. Use globs. [SC2045]"

bash - 这个错误是什么意思? (SC2129 : Consider using { cmd1; cmd2; } >> file instead of individual redirects.)

bash - 使用脚本操作 OS X 窗口

bash - 从 Bash 脚本为 Stripe 自动输入密码

Bash 脚本命令和摆脱 shellcheck 错误 SC2181