我正在上C级课程,如果成功的话,用C语言写的每个程序必须返回0。
现在想象我有三个用C语言编写的程序,做任何你喜欢的事情,但是他们都成功了,所以他们都返回0。
我对操作系统如何处理此返回值有疑问。
考虑在Bash shell中将这三个命令链接在一起,当前两个命令成功时执行第三个命令。
(command1 && command2) && command3
然而,如果command1和command2都成功,它们都返回0,因此我无法理解这个机制是如何工作的,因为0和任何使得总是为0(false)。 这样命令3就不会执行..(也就是命令2不会执行)
提前致谢
答案 0 :(得分:1)
理由是,有一种方法(0
)可以使命令成功,但有很多方法(任何非零整数)才能失败。不要将bash对退出状态的使用与0的标准布尔解释混淆为false和非零为真。 shell if语句检查其命令是否成功。
&&
不是一个布尔运算符。如果command1 && command2
和0
的退出状态均为command1
,则command2
的退出状态为0
(成功)。如果command1
具有非零(失败)退出状态,那就是复合命令的退出状态(实际上,command2
根本不运行)。如果command1
成功,则执行command2
,并且复合命令的退出状态为command2
的退出状态。
另外请记住不要将复合命令执行与算术执行操作符(( ... ))
混淆,后者是一个特殊命令,其内容被计算为算术表达式,如果表达式为非,则退出状态为0如果表达式等于0,则零值和退出状态为1.(不要试图认为(( ... ))
在某种程度上等同于逻辑NOT。)
答案 1 :(得分:0)
您可以使用if语句。
if [ `command1` -eq 0 ] && [ `command2` -eq 0 ]; then command3; fi