171

我通常;习惯在一行中组合多个命令,但有些人更喜欢&&. 有什么区别吗?例如,cd ~; cd -cd ~ && cd -似乎做同样的事情。哪个版本更便携,例如,会受到像 Android 的 shell 这样的 bash 子集的支持?

4

7 回答 7

236

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

但是用&&第二个就不会运行了。

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

于 2011-05-27T13:15:40.277 回答
66

&&很久以前在附近的电脑上使用:

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 *是安全的... ;)

于 2011-05-27T18:33:39.427 回答
28

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

cmd1 ; cmd2,cmd2在任何情况下都会执行。

这两种结构都是符合 POSIX 的 shell 的一部分。

于 2011-05-27T13:12:44.233 回答
18

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

当您需要根据前一个命令是否正常完成而需要采取特定操作时非常有用。

于 2011-05-27T13:14:46.763 回答
8

分隔的命令;无论完成状态如何都按顺序执行。

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

这在 bash 手册页中有所介绍Lists。我希望任何类 Unix 的 shell 都支持这两个运算符,但我并不特别了解 Android shell。

于 2011-05-27T13:13:18.137 回答
3

&&允许条件执行,同时;总是执行第二个命令。

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

于 2011-05-27T13:15:11.617 回答
2

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


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

而 ; 版本仅仅是:


cmd1
cmd2
于 2011-05-27T15:48:24.470 回答