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

时间:2012-07-30 01:07:56

标签: c bash shell unix

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

./foo && ./bar

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

3 个答案:

答案 0 :(得分:7)

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约定的人来说,这可能相当令人不安,但是在shell术语中更有意义的是,truth = success = zero退出状态,而false = failure = nonxero退出状态。

答案 1 :(得分:5)

你没有遗漏任何东西。您必须记住,truefalse不是shell中的基本概念。 successfailure是。{/ p>

答案 2 :(得分:2)

你错过了Bash &&运算符的定义:

command1 && command2
command2 仅在 command1 退出状态为零。