在bash中,我们可以使用&&运算符执行两个指令。 例如:
./foo && ./bar
将首先执行foo
,且仅当foo是“成功的”,它会再执行bar
。 但是,当你考虑到C程序,按照惯例,返回0或这似乎违反直觉的exit(0)
成功完成,这违背常理的行为时&&
运营商。 (因为在大多数语言中,0被认为是一个“falsey”,因而将停止从执行第二条语句。)我在想什么?
在bash中,我们可以使用&&运算符执行两个指令。 例如:
./foo && ./bar
将首先执行foo
,且仅当foo是“成功的”,它会再执行bar
。 但是,当你考虑到C程序,按照惯例,返回0或这似乎违反直觉的exit(0)
成功完成,这违背常理的行为时&&
运营商。 (因为在大多数语言中,0被认为是一个“falsey”,因而将停止从执行第二条语句。)我在想什么?
你不会错过任何。 你一定要记住, true
和false
是不是在外壳的基本概念。 success
和failure
的。
C语言约定,0是假,别的真的,就是这样,一个会议 。 巴什(和unix一般炮弹),使用相反的约定: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约定,但它使很多更有意义的外壳而言,真理=成功=零个退出状态,而假的= =失败退出nonxero状态。
你缺少一个bash的&&
运营商正是如此定义:
命令1 &&
命令2
如果命令2被执行,且仅当是command1返回零退出状态。