如何将Python脚本的多个输出值传递给Bash Shell脚本
解决方案
你提到的x=($(python 脚本路径))写法是可用的,echo $x仅输出第一个值是Bash数组的默认特性:直接引用数组名时默认返回索引为0的第一个元素,完整操作方案如下:
方法1:使用Bash数组接收(适合返回值无空格的场景)
你的Python脚本无需修改,保持现有空格分隔打印返回值的逻辑即可,Bash脚本按如下方式编写:
#!/bin/bash # 将Python的输出按空格拆分,存入数组 results=($(~/.conda/envs/vegetation/bin/python ./python.py)) # 按索引读取对应值,Bash数组索引从0开始 result1=${results[0]} result2=${results[1]} result3=${results[2]} # 测试验证 echo "result1值为:$result1" echo "result2值为:$result2" echo "result3值为:$result3" # 后续你的业务逻辑
如果需要查看数组所有元素,执行echo ${results[@]}即可。
方法2:指定分隔符直接赋值(更稳妥,支持返回值带空格的场景)
如果后续返回值可能包含空格,可以自定义分隔符避免拆分错误,操作步骤如下:
- 修改Python脚本的打印逻辑,指定分隔符(比如用逗号,确保你的返回值里不含该字符即可):
# 把原来的print(result1, result2, result3)改为: print(result1, result2, result3, sep=',')
- Bash脚本直接读取赋值给三个变量,不需要操作数组:
#!/bin/bash # 指定分隔符为逗号,直接读取三个变量 IFS=, read -r result1 result2 result3 < <(~/.conda/envs/vegetation/bin/python ./python.py) # 直接使用变量即可 echo "result1值为:$result1" echo "result2值为:$result2" echo "result3值为:$result3"
内容的提问来源于stack exchange,提问作者Xu Shan
相关产品推荐
相关产品推荐

