You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash读取数组格式文件生成逐行列表的脚本问题求解

问题原因

你原脚本的核心问题是:value=$(<file.txt)读取到的是JSON格式的普通字符串,并非Bash可直接遍历的原生数组结构。你脚本中echo ${#value[@]}输出结果为1,也能佐证此时value仅为单个字符串元素,不是存储了4个内容的数组。直接遍历该字符串时,Bash会默认按空白字符拆分内容,无法自动剥离JSON语法符号(方括号、双引号、逗号),因此输出会残留多余格式。

修正方案

你可以根据实际环境选择以下任意一种方案实现需求:

方案1:使用jq(推荐,适配所有标准JSON数组)

如果系统安装了jq(轻量JSON命令行处理工具),仅需一行命令即可完成转换,对格式兼容性更强,不会出现符号残留:

#!/bin/bash
jq -r '.[]' file.txt > file2.txt

关键参数说明:

  • -r:输出原始字符串内容,自动剥离JSON格式包裹的双引号
  • .[]:遍历JSON数组中的每一个元素

方案2:无第三方依赖,用系统自带sed处理

如果不想安装额外工具,可以直接用系统自带的流编辑器sed清理多余符号,再拆分换行:

#!/bin/bash
sed 's/\[//g; s/\]//g; s/"//g; s/,//g' file.txt | tr -s ' ' '\n' > file2.txt

命令逻辑:

  • 先通过sed全局替换删除所有[、]、"、,符号
  • 再通过tr将空格替换为换行,多余连续空格自动压缩,最终逐行写入目标文件

方案3:纯原生Bash实现,不调用外部文本工具

如果需要完全用Bash内置语法实现,可以先清理字符串内的格式符号,再转为原生数组遍历写入:

#!/bin/bash
# 读取源文件原始内容
raw_content=$(<file.txt)
# 通过Bash内置字符串替换,移除所有JSON格式符号
clean_content=${raw_content//[\[\]\",]/}
# 将清理后的内容转为原生Bash数组
value=($clean_content)
# 遍历数组逐行写入目标文件
for key in "${value[@]}"; do
  echo "$key"
done > file2.txt

内容的提问来源于stack exchange,提问作者Cristian Andres Gil Vlla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:54:36