C程序返回码和&bash符号?

bash中,我们可以使用&&运算符来执行两个命令。 例如:

./foo && ./bar 

首先执行foo ,只有当foo“成功”时,才会执行bar 。 然而,当你认为C程序按照约定在成功完成时返回0或exit(0) ,这对于&&操作符的行为来说是违反直觉的,这似乎是违反直觉的。 (因为在大多数语言中,0被认为是“假的”,因此会阻止第二个语句的执行。)我错过了什么?

你不会错过任何东西。 你只需要记住, false不是shell中的基本概念。 successfailure是。

C语言的约定,0是假的,其他的都是真的,就是这个约定 。 Bash(和一般的unix shell)使用相反的约定:0是真的,其他的都是假的。

 $ if ( exit 0 ); then echo true; else echo false; fi true $ if ( exit 1 ); then echo true; else echo false; fi false $ if ( exit 2 ); then echo true; else echo false; fi false 

因此, true命令总是以0的状态退出,而false退出的状态为1。

 $ true; echo $? 0 $ false; echo $? 1 

对于习惯于C约定的人来说,这可能相当令人不安,但是在真实性=成功=零退出状态,而虚假=失败=非退出状态的情况下,这样做更有意义。

你错过了Bash的&&操作符是这样定义的:

command1 && command2
当且仅当command1返回零的退出状态时才执行command2