在bash中,我们可以使用&&运算符来执行两个命令。 例如:
./foo && ./bar
首先执行foo
,只有当foo“成功”时,才会执行bar
。 然而,当你认为C程序按照约定在成功完成时返回0或exit(0)
,这对于&&
操作符的行为来说是违反直觉的,这似乎是违反直觉的。 (因为在大多数语言中,0被认为是“假的”,因此会阻止第二个语句的执行。)我错过了什么?
你不会错过任何东西。 你只需要记住, false
不是shell中的基本概念。 success
与failure
是。
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 。