我有点不安地发现以下行为:
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+
答案 0 :(得分:4)