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

Bash中PIPESTATUS数组无法读取全部管道退出码的问题解决

关于Bash中PIPESTATUS数组访问的问题

问题场景

执行如下Bash脚本时:

#!/bin/bash
echo "hello" | wc -w
echo "${PIPESTATUS[0]}"
echo "${PIPESTATUS[1]}"

发现echo "${PIPESTATUS[0]}"能输出0,但echo "${PIPESTATUS[1]}"无输出;但如果在管道执行后立即用echo ${PIPESTATUS[*]},却能得到0 0。

原因分析

  • PIPESTATUS的易失性:Bash的PIPESTATUS数组是一次性、易失性的——它仅保存上一条管道命令的退出状态,一旦执行任何其他命令(哪怕是简单的echo),PIPESTATUS数组就会被覆盖重置。在你的脚本中,第一条echo "${PIPESTATUS[0]}"执行后,PIPESTATUS已经被更新为这条echo命令的退出状态(仅包含一个元素0),因此第二条echo访问PIPESTATUS[1]自然没有内容。

解决办法

要保留管道的所有退出状态,需在管道执行后立即将PIPESTATUS数组的值复制到普通数组,之后通过普通数组访问元素:

#!/bin/bash
echo "hello" | wc -w
# 立即复制PIPESTATUS到自定义数组
pipe_status=("${PIPESTATUS[@]}")
# 访问自定义数组的元素
echo "${pipe_status[0]}"
echo "${pipe_status[1]}"

执行上述脚本后,就能正确输出两个0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:03:10