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

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

例如,

$ command1 && command2 

VS

 $ command1; command2 

&&运算符是一个布尔AND运算符:如果左侧返回非零退出状态,则运算符返回该状态并且不计算右侧(短路),否则评估右侧并返回其退出状态。 这通常用于确保command2只在command1成功运行的情况下运行。

The ; 令牌只是分离命令,所以它将运行第二个命令,而不pipe第一个命令是否成功。

command1 && command2

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

命令1; 命令2

command1; command2 command1; command2执行command1后,执行command1 。 命令是否成功并不重要。

前者是一种简单的使用短路评估的逻辑,后者只是简单地划分了两个命令。

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