warum "echo $" nicht den Exit-Code des Befehls direkt davor drucken, während er in "&&" verwendet wird?

627
One Two Three

Angenommen, ich habe dieses einfache C-Programm, das der Shell 4 zurückgibt.

int main() { return 4; } 

Wenn ich es laufen lasse, dann echo $?würde ich bekommen 4, was erwartet wird

$ gcc foo.c && ./a.out $ echo $? 4 <<<< expected 

ABER wenn ich folgendes mache, bekomme ich nichts

$ gcc foo.c && ./a.out && echo $? $ <<<< Nothing - WHY???? 
2

1 Antwort auf die Frage

5
choroba

&&führt das zweite Argument nur aus, wenn das erste Argument erfolgreich war, dh mit Exitcode 0 abgeschlossen wurde. Exitcode 4 bedeutet "Fehler" für die Shell, also echowird der nicht ausgeführt. Versuchen

gcc foo.c && ./a.out || echo $? 

Wenn Sie den Exit-Code nur anzeigen möchten, wenn er nicht Null ist. Wenn Sie es immer sehen wollen, verwenden Sie

gcc foo.c && ./a.out ; echo $? 

Beachten Sie, dass es den Exit-Code des melden kann, gccwenn es nicht Null ist.