【发布时间】:2015-06-25 09:04:47
【问题描述】:
发现以下行为让我有点不安:
bash$ false
bash$ true | echo $?
0
bash$ ksh
ksh$ false
ksh$ true | echo $?
0
ksh$ zsh
zsh$ false
zsh$ true | echo $?
1
直观地说,zsh 似乎是正确的,而 bash 和 ksh 是错误的。 $? 是“最近执行的管道的退出状态”,在每种情况下都应为 1。请注意,false | echo $? 在 ksh 和 bash 中也打印 0。标准在这一点上是否灵活(即行为未指定),或者bash 和ksh 在这里不兼容?我也很想知道 bash 和 ksh 做了什么导致这个错误。
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.
$ zsh --version
zsh 4.3.11 (i386-apple-darwin11.0)
$ ksh --version
version sh (AT&T Research) 1993-12-28 s+
【问题讨论】:
-
当我运行您的
bash示例时,我得到的是1,而不是0。 -
什么版本的 bash?在我的系统上产生与您的 zsh 输出相同的输出。
-
请大家提一下shell的版本。和我在一起
zsh实际上返回了0。因此无法验证。 -
那是你那里收藏的古代贝壳……看起来更像博物馆 :-)
-
在 FreeBSD 10.1 上,
/bin/sh在您的示例中的行为类似于zsh(echo打印“1”)。在csh中,... | echo $?总是打印“0”。