Byłem trochę zaniepokojony, aby znaleźć następujące zachowanie:
bash$ false
bash$ true | echo $?
0
bash$ ksh
ksh$ false
ksh$ true | echo $?
0
ksh$ zsh
zsh$ false
zsh$ true | echo $?
1
Intuicyjnie wygląda zsh dostaje to prawo podczas bash i ksh są błędne. $?
jest "stanem wyjściowym ostatnio wykonanego potoku", który w każdym przypadku powinien wynosić 1. Zauważ, że false | echo $?
również drukuje 0 w obu ksh
i bash
. Czy standard jest elastyczny w tym punkcie (tj. Zachowanie jest nieokreślone), czy też są niezgodne z tym standardem? Ciekawi mnie też, co robią bash i ksh, żeby to zepsuć.
$ 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+
Po uruchomieniu przykładu 'bash' otrzymałem' 1', a nie '0'. – lurker
Jaką wersję bash? Wytwarza to samo, co twoje wyjście zsh w moim systemie. – Mat
Proszę podać wersję powłoki proszę dla wszystkich. U mnie 'zsh' faktycznie zwrócił' 0'. Nie można tego zweryfikować. –