在Linux Bash中,双与号(&&)和分号(;)之间有什么区别?


112

Linux Bash中的&字符和分号有什么区别?

例如,

$ command1 && command2

$ command1; command2

6
我在这里回答了这个问题:superuser.com/a/619019/107862
Etan Reisner 2014年

9
关于脱题,我上次检查时,bash仍然是一种编程语言,但是我以前是错的,它可能是一些干果糖。
史蒂夫·K

是的,并且您是否在问有关特定行为或做某件事的正确方法的问题,这肯定是主题。这属于“关于语言语法的问题”的较灰色类别,就我而言,这并不是一个“编程”问题。
Etan Reisner,2015年

4
bash在某些方面是干燥的,在某些方面是甜的。归根结底,它令人愉悦且易于消化。但是,它不容易从婴儿身上偷走。
code_monk

Answers:


138

&&运算符是布尔AND运算符:如果左侧返回非零退出状态,则该运算符将返回该状态并且不评估右侧(发生短路),否则它将评估右侧并返回其退出状态。这通常用于确保command2command1在成功运行后才能运行。

;令牌只是分隔命令,因此它将运行第二个命令,而不管第一个命令是否成功。


6
bash中的双&符&&与单个&符&有什么不同吗?
查理·帕克

16
@CharlieParker &导致命令在后台运行,所以可以。“在后台运行此命令”与“仅在另一个命令成功的情况下运行下一个命令”非常不同。
cdhowie

command2将仅运行command1并返回退出状态,这意味着它已成功完成
Nik

33

command1 && command2

command1 && command2执行command2当(且仅当)command1执行成功结束。在Unix术语中,这意味着退出代码 / 返回代码等于零。

command1; 命令2

command1; command2command2command1顺序执行后执行。命令是否成功无关紧要。


6

前者是AND使用短路评估的简单逻辑,后者只是界定两个命令。

实际发生的情况是,当第一个程序返回非零退出代码时,将对整个AND程序求值,FALSE并且第二个命令将不会执行。后者只是按顺序执行它们。

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.