Linux Bash中双& (&&)和分号(;)有什么区别?

在Linux Bash中&和分号之间的区别是什么?

例如,

$ command1 && command2

vs

$ command1; command2
79825 次浏览

&&操作符是一个布尔AND操作符:如果左边返回一个非零的退出状态,该操作符返回该状态而不计算右边(它短路),否则它计算右边并返回其退出状态。这通常用于确保只有在command1成功运行时才运行command2

;令牌只是分隔命令,所以不管第一个命令是否成功,它都会运行第二个命令。

command1,,command2

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

command1;command2

command1; command2在执行command1之后依次执行command2。命令是否成功并不重要。

前者是一个简单的逻辑AND使用短路求值,后者只是分隔两个命令。

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