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

use*_*425 4 c unix bash shell

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

./foo && ./bar
Run Code Online (Sandbox Code Playgroud)

将首先执行foo,并且只有当foo"成功"时,它才会执行bar.但是,当您认为C程序按惯例返回0或exit(0)成功完成时,这似乎是违反直觉的,这与&&操作员的行为背道而驰.(因为在大多数语言中,0被认为是'假的',因此会阻止第二个语句执行.)我错过了什么?

Gor*_*son 7

0是假的C语言约定,其他任何都是真的,就是惯例.Bash(以及一般的unix shell)使用相反的约定:0为true,其他任何都为false.

$ 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
Run Code Online (Sandbox Code Playgroud)

因此,true命令始终以状态0 false退出,而退出时状态为1.

$ true; echo $?
0
$ false; echo $?
1
Run Code Online (Sandbox Code Playgroud)

这对于习惯于C约定的人来说可能相当令人不安,但是在shell术语中它更有意义,即= true = success = zero exit status,而false = failure = nonxero退出状态.


Ala*_*rry 5

你没有遗漏任何东西.你只需要记住,truefalse不是shell中的基本概念.success并且failure是.