为什么“echo $?”在“&&”中使用时不打印其前面命令的退出代码?

为什么“echo $?”在“&&”中使用时不打印其前面命令的退出代码?

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

int main()
{
  return 4;
}

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

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

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

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

答案1

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

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

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

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

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

相关内容