回声$?以下场景中不显示返回值,即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 $? ; }
这些{...}
命令对命令进行分组,因此如果编译成功,它们都会被执行。