在bash中,我们可以使用&&运算符执行两个命令。例如:
./foo && ./bar
首先执行foo
,并且只有当foo“成功”时,它才会执行bar
。但是,当您认为C程序按照惯例在成功完成时返回0或exit(0)
时,这似乎是违反直觉的,这与&&
运算符的行为背道而驰。 (因为在大多数语言中,0被认为是'假的',因此会阻止第二个语句执行。)我缺少什么?
答案 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)
你没有遗漏任何东西。您必须记住,true
和false
不是shell中的基本概念。 success
和failure
是。{/ p>
答案 2 :(得分:2)
你错过了Bash &&
运算符的定义:
command1 &&
command2
command2 仅在 command1 退出状态为零。