Bash/sh - &&和之间的差异;

psi*_*lia 124 syntax bash shell multiplatform

我通常;习惯在一行中组合多个命令,但有些人更喜欢&&.有什么区别吗?例如,cd ~; cd -并且cd ~ && cd -似乎让同样的事情.哪个版本更具可移植性,例如Android版shell还是支持bash-subset?

小智 182

如果先前的命令失败,;则第二个命令将运行.

但是&&第二个不会运行.

这是操作之间的"惰性"逻辑"AND"操作数.

  • 因此,您更愿意运行“sudo apt update && sudo apt update”,而不是“sudo apt update;” sudo apt update`,对吗? (3认同)
  • 换句话说,它具有短路行为 (2认同)

jm6*_*666 54

我正在使用&&因为很久以前在附近的电脑:

root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C
Run Code Online (Sandbox Code Playgroud)

但没有帮助...;)

cd /tnp/test && rm -rf * 是安全的... ;)

  • 为了更安全,我使用`rm -rf/tnp/test` (25认同)
  • 很棒的插图! (3认同)
  • 为了更安全,最好使用rm / tnp / test / -rf来防止致命的输入missclick (3认同)

Pas*_*uoq 21

In cmd1 && cmd2,cmd2仅在cmd1成功时执行(返回0).

cmd1 ; cmd2,cmd2则在任何情况下执行.

这两种构造都是符合POSIX标准的shell的一部分.


Fre*_*ihl 8

&&表示如果前一个命令以状态0退出,则执行下一个命令.相反,||如果先前的命令以不等于0的状态退出,则使用ie ;执行.

当您需要采取特定操作时非常有用,具体取决于前一个命令是否完成.


小智 6

&&允许有条件执行,同时;始终执行第二个命令。

在eg中command1 && command2,只有在用 终止command2时才会执行,表示一切顺利,而在第二个命令中,无论结果是什么,都将始终执行。command1exit 0command1 ; command2command1


Dav*_*sta 5

;无论其完成状态如何,分开执行的命令都是顺序执行的.

使用时&&,仅当第一个命令成功完成时才执行第二个命令(返回退出状态为0).

这包含在bash手册页下Lists.我希望任何类似Unix的shell都支持这两种运算符,但我不知道具体的Android shell.

  • 这是 bash 手册的链接:http://www.gnu.org/software/bash/manual/bashref.html#Lists (2认同)