在Ubuntu 14.04的bash命令行上:
echo "z" | grep -e 'x' ; echo $PIPESTATUS
即使"z"中明显没有"x",它也始终显示为0。但是:
echo "z" > /tmp/z
grep -e 'x' /tmp/z ; echo $PIPESTATUS
此函数按照我的期望工作,如果模式为'x'(如所示),则返回1,如果模式为'z',则返回0。
为什么?
PIPESTATUS
是一个 BASH 数组变量,包含最近一次执行的前台管道中进程的退出状态值列表。
要打印所有退出状态,您需要将其用作:
echo "z" | grep -e 'x' ; echo ${PIPESTATUS[@]}
0 1
0
是第一个 echo
命令的退出状态码,1
是 grep 命令的退出状态码。
当您使用 echo $PIPESTATUS
命令时,它只会打印数组的 第一个元素。
要检查 grep 命令的状态,甚至不需要使用 PIPESTATUS
。
您只需使用 $?
命令:
echo "z" | grep -q 'x' ; echo $?
1
$ary
实际上是${ary[0]}
。 - glenn jackman