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

如何在bash脚本中遍历Python输出的含空格名称列表?

解决方案

问题根源

当前问题的核心是两层逻辑导致的字段拆分异常:

  1. Python直接输出的列表没有明确的名称边界,空格既会出现在单个名称内部,也会作为名称之间的分隔符
  2. Bash默认的内部字段分隔符(IFS)包含空格,会将所有空格识别为字段拆分标记,导致完整名称被拆分为单个单词

最优实现方案(推荐)

步骤1:修改Python输出逻辑,明确名称边界

调整Python脚本,让每个完整名称单独占一行输出,从源头避免空格歧义:

names = ["Raj Sonakshi", "Getendar", "Raghu Varan (Mr)"]
# 逐行打印每个完整名称,明确分隔边界
for name in names:
    print(name)

步骤2:调整Bash读取逻辑,保留名称内空格

使用mapfile命令将Python逐行输出的内容完整读取到数组中,再遍历数组:

# -t 参数会自动去掉每行末尾的换行符
mapfile -t arr < <(python names.py)

# 遍历数组时必须给变量加双引号,避免空格拆分
for i in "${arr[@]}"; do
  echo "$i"
done

临时兼容方案(无需修改Python脚本)

如果无法调整Python脚本,可通过awk预匹配固定格式的名称拆分后再读取,仅适合固定名称列表的场景:

while IFS= read -r line; do
  arr+=("$line")
done < <(python names.py | awk 'match($0, /(Raj Sonakshi|Getendar|Raghu Varan \(Mr\))/, res) {for(i in res) print res[i]}')

for i in "${arr[@]}"; do
  echo "$i"
done

内容的提问来源于stack exchange,提问作者jessy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:45:04