Bash / sh-&&和;之间的区别


136

我通常;在一行中组合多个命令,但是有些人更喜欢&&。有什么区别吗?例如,cd ~; cd -并且cd ~ && cd -似乎让同样的事情。哪个版本更可移植,例如bash子集(例如Android的shell或类似版本)将支持该版本?

Answers:


193

如果前一个命令失败,;第二个命令将运行。

但随着&&第二个将无法运行。

这是操作之间的“惰性”逻辑“ AND”操作数。


2
换句话说,它具有短路行为
peterchaula

@peter哪一个?在;一个或&&一个?还是两者兼而有之?
Shayan

@Shayan ,&&
peterchaula

57

我使用&&是因为很久以前在附近的计算机上:

root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C

但没有帮助...;)

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


26
为了安全rm -rf /tnp/test
起见

5
为了更加安全,最好使用它rm /tnp/test/ -rf来防止致命的输入missclick
radrow

22

在中cmd1 && cmd2cmd2仅在以下情况下执行cmd1成功(返回0)时执行。

在中cmd1 ; cmd2cmd2无论如何都要执行。

这两个构造都是POSIX兼容外壳程序的一部分。


11

&&表示||如果前一个命令退出时状态为0,则;执行下一条命令。反之,请使用ie,如果前一个命令退出时状态不为0,则始终执行。

当您需要执行特定操作时,此功能非常有用,具体取决于上一个命令是否完成。


5

;无论命令的完成状态如何,都将依次执行由命令分隔的命令。

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

在bash的联机帮助页中对此进行了介绍Lists。我希望任何类似Unix的外壳程序都支持这两个操作符,但是我不特别了解Android外壳程序。



3

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

在例如中command1 && command2command2仅在command1终止时执行exit 0,表示一切顺利,而在command1 ; command2第二个命令中无论结果如何都将始终执行command1


1

&&在bash中是逻辑AND。Bash对逻辑AND进行短路评估。这个成语是表达以下内容的一种简单方法:


cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi

而; 版本仅仅是:


cmd1
cmd2
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.