在bash shell

时间:2018-04-19 07:44:25

标签: bash shell operating-system return-value

我正在上C级课程,如果成功的话,用C语言写的每个程序必须返回0。

现在想象我有三个用C语言编写的程序,做任何你喜欢的事情,但是他们都成功了,所以他们都返回0。

我对操作系统如何处理此返回值有疑问。

考虑在Bash shell中将这三个命令链接在一起,当前两个命令成功时执行第三个命令。

(command1 && command2) && command3

然而,如果command1和command2都成功,它们都返回0,因此我无法理解这个机制是如何工作的,因为0和任何使得总是为0(false)。 这样命令3就不会执行..(也就是命令2不会执行)

提前致谢

2 个答案:

答案 0 :(得分:1)

理由是,有一种方法(0)可以使命令成功,但有很多方法(任何非零整数)才能失败。不要将bash对退出状态的使用与0的标准布尔解释混淆为false和非零为真。 shell if语句检查其命令是否成功。

从你想到的意义上来说,

&&不是一个布尔运算符。如果command1 && command20的退出状态均为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