在bash中拆分列表

时间:2018-12-25 10:53:51

标签: 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忽略它?

1 个答案:

答案 0 :(得分:5)

这不是数组:

list="a b c d"

您只是将list分配给长度为7的字符串。

使其成为一个真实的数组:

list=(a b c d)

然后使用for item in "${list[@]}",您将获得正确的结果。


对于更新后的问题,您应该只使用$list而不是${list[@]},因为list不是数组。