Ich war etwas gestört, das folgende Verhalten zu finden:
%Vor% Intuitiv sieht es so aus, als würde zsh es richtig machen, während bash und ksh falsch liegen. $?
ist 'der Exit-Status der zuletzt ausgeführten Pipeline', die jeweils 1 sein sollte. Beachten Sie, dass false | echo $?
auch 0 in ksh
und bash
ausgibt. Ist der Standard in diesem Punkt flexibel (dh das Verhalten ist nicht spezifiziert) oder sind bash
und ksh
nicht konform? Ich bin auch neugierig zu wissen, was Bash und Ksh tun, um das falsch zu machen.
POSIX sagt:
$? Expandiert in den Dezimal-Exit-Status der letzten [Befehl oder] Pipeline ...
Bitte beachten Sie den Kommentar von @ lurker . Bash in seiner aktuellen Version 4.3.11
verhält sich genauso wie zsh
.
Was in bash
und zsh
passiert, ist, dass $?
durch den Befehl vor der Pipe gesetzt wird und nicht innerhalb der Pipe geändert wird. Deshalb ist das erwartete Ergebnis der Rückgabewert von false
- & gt; %Code%. Und genau das setzt POSIX fest.
Ich konnte keine Dokumentation finden, die das Verhalten 1
beschreibt. Ich kann nur annehmen, dass ksh
vor der Ausführung der Pipe ksh
zurücksetzt, da der folgende Code funktioniert:
Wahrscheinlich sollte dies als Fehler in $?
abgelegt werden. Ich bin mir jedoch nicht sicher, ob dieses Verhalten von POSIX genau genug angegeben wird.