首页 > 解决方案 > 在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忽略这个?

标签: bashshellcheck

解决方案


这不是一个数组:

list="a b c d"

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

使它成为一个真正的数组:

list=(a b c d)

然后用for item in "${list[@]}",你得到正确的结果。


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


推荐阅读