./a.out && 回显 $?仅当 return = 0 时才打印返回值

./a.out && 回显 $?仅当 return = 0 时才打印返回值

回声$?以下场景中不显示返回值,即1。

echo "int main() { return 1; }" > foo.c
gcc foo.c && ./a.out && echo $?

然而,回声$?当程序返回0时才起作用。这是为什么呢?

注意:如果您执行其他操作回声$?在上面的代码之后,您将得到所需的输出 1。

答案1

运算&&符是一个布尔值具有短路评估功能。这意味着如果第一个命令成功(即返回0),它只会执行第二个命令。它的典型使用方式是这样的:

tar xf file.tar && rm file.tar

仅当提取成功时才会删除该文件。

您的脚本还包含一个很好的示例:

gcc foo.c && ./a.out

gcc仅当成功时才会尝试运行该程序。

如果想$?不管是否成功都显示a.out,可以这样写:

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

这些{...}命令对命令进行分组,因此如果编译成功,它们都会被执行。

相关内容