使用&&代替;的原因是什么?放置在同一行上的命令?


30

我不是一个不是Linux还是不是Unix的专家吗?我想知道这两种在同一行上输入2个命令的方法之间的区别是什么?在这个简单的示例中,我看不到输出的差异

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

这没有引起任何问题-我很好奇。

Answers:


43

&&是一个逻辑“与”。仅当第一个参数返回true时,才会评估第一个参数,而第二个则被评估。原因是“ false AND something”始终为false,因此在这种情况下无需评估第二个参数。

因此&&,如果第一个命令报告错误(true使用退出代码0表示,表示没有错误),请确保您不使用第二个命令。相反,;无论第一个命令的结果如何,都执行这两个命令。

结论:与链接命令&&是一个好习惯。相反,;如果出现问题,它将不执行后续命令。


您是说0是对true还是对0-出现错误?
Michael Butler

1
@MichaelButler:0意味着true。我添加了一个说明。
azimut 2013年

26

;

无论先前的退出状态是什么,都将顺序执行命令:

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

逻辑与

执行下一条命令,但前提是上一条命令成功执行(退出状态为0):

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

逻辑或

仅在上一条命令失败(退出状态不是 0)时执行下一条命令:

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command

6
此外,sh -c "exit 0"可以true在这些示例sh -c "exit 1"中用和替换false
Flimm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.