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

如何在Bash中将Python返回的列表正确转换为Bash数组

Python列表转Bash数组的正确实现

问题原因

你之前使用的sed命令's/[^a-zA-Z0-9-]/ /g'存在两个问题:

  • 正则规则仅保留字母、数字、横杠,列表元素中合法的.也被匹配替换为空格,破坏了原有内容
  • 所有需要剔除的分隔符(括号、单引号、逗号)都被统一替换为空格,会生成大量连续的冗余空格

实现方案

方案1:sed简单处理(适用于元素无空格、无特殊分隔符的场景)

直接精准剔除不需要的符号,不做全局替换:

# 假设Python返回的内容保存在变量py_output中
py_output="list = ['A','B-D','A12.C']"
my_array=($(echo "$py_output" | sed -E "s/^list\s*=\s*\[//;s/\]//;s/'//g;s/,/ /g"))

验证结果:

# 输出所有数组元素
echo "${my_array[@]}"
# 遍历数组
for item in "${my_array[@]}"; do
  echo "$item"
done

输出结果为:

A B-D A12.C
A
B-D
A12.C

方案2:jq通用处理(适用于元素含空格、特殊符号的复杂场景)

先将Python输出的单引号列表转为合法JSON格式,再通过jq解析读取,避免分词异常:

py_output="list = ['A','B-D','A12.C']"
# 提取数组部分并转单引号为双引号,生成合法JSON
json_arr=$(echo "$py_output" | grep -o "\[.*\]" | sed "s/'/\"/g")
# 读取元素到Bash数组,支持元素含空格、特殊字符
mapfile -d '' my_array < <(echo "$json_arr" | jq -r '.[]' | tr '\n' '\0')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:48:04