bash - 在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
它不是数组。
推荐阅读
- controls - 设置 EPICS 控制器/IOC
- excel - Excel:如何以百万或任何自定义类型显示值
- reactjs - 组件重新渲染后的 React API 调用
- node.js - 条纹 - 创造电荷
- c++ - 编译 .cc 文件以在 Intel Hyperscan 中使用时出现问题
- angular - 从 Typescript 中的内联脚本定义的值中获取值
- python - python:为什么用户脚本目录在 python 版本之间共享?
- java - Java - .jar 文件用尽堆但在 Eclipse 中执行不会
- delphi - 用 Delphi 10 编写的 DLL 在从 Delphi 6 调用时会出现访问冲突
- node.js - 从 Pump.io 服务器获取消费者密钥和签名