如何将Python脚本输出的列表正确转换为Bash脚本中的数组
问题原因
你原来的sed切割逻辑存在缺陷:你把所有, (逗号加空格)统一替换为换行,但第一个元素Google USA (US Dollars, million)内部本身就包含, 字符组合,所以被提前错误切分成了两行,最终得到的数组元素自然不完整。
正确实现方案
方案1:修改Python输出格式(最稳妥,无额外依赖)
直接让Python脚本逐行输出列表元素,完全避免分隔符冲突,操作如下:
修改printlist.py,将原来直接打印列表的逻辑改为遍历输出:
# 假设你的原始列表变量为res res = ['Google USA (US Dollars, million)','Google UK (sf.nk)','Google India(rk,lp)'] for item in res: print(item)
之后Bash中直接用mapfile读取即可,不需要额外的字符串处理:
mapfile -t arr < <(python3 /path/printlist.py)
方案2:不修改Python脚本,用JSON解析逻辑处理
如果不能调整Python代码,可以直接把Python输出的列表转成标准JSON格式后按结构解析,避免字符串匹配切割的误差:
mapfile -t arr < <(python3 /path/printlist.py | sed "s/'/\"/g" | jq -r '.[]')
如果环境没有预装jq,可以先通过系统包管理器安装(如apt install jq/yum install jq),该方案对任意内容的列表元素都兼容,不会出现切割错误。
效果验证
两种方案执行后,使用你原有的遍历代码即可输出完整元素:
Google USA (US Dollars, million) Google UK (sf.nk) Google India(rk,lp)
内容的提问来源于stack exchange,提问作者swarna
相关产品推荐
相关产品推荐

