为什么不“回声 $?” 在“&&”中使用时,在它之前打印命令的退出代码?

One*_*ree 2 bash echo exit-code

假设我有这个简单的 C 程序,它向 shell 返回 4。

int main()
{
  return 4;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它,然后做echo $?,我会得到4,这是预期的

$ gcc foo.c && ./a.out
$ echo $?
4               <<<< expected
Run Code Online (Sandbox Code Playgroud)

但是当我执行以下操作时,我什么也没得到

$ gcc foo.c && ./a.out && echo $?
$             <<<< Nothing - WHY????
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 5

&&仅当第一个参数成功时才运行第二个参数,即如果它以退出代码 0 结束。退出代码 4 表示 shell 的“失败”,因此echo不执行。尝试

gcc foo.c && ./a.out || echo $?
Run Code Online (Sandbox Code Playgroud)

如果您只想在不为零时查看退出代码。如果您想始终看到它,请使用

gcc foo.c && ./a.out ; echo $?
Run Code Online (Sandbox Code Playgroud)

请注意,gcc如果它不为零,它可以报告退出代码。