【发布时间】:2011-09-03 09:42:49
【问题描述】:
我通常使用; 在一行中组合多个命令,但有些人更喜欢&&。有什么区别吗?例如,cd ~; cd - 和 cd ~ && cd - 似乎做了同样的事情。哪个版本更便携,例如会受到像 Android 的 shell 这样的 bash 子集的支持吗?
【问题讨论】:
标签: bash shell syntax multiplatform
我通常使用; 在一行中组合多个命令,但有些人更喜欢&&。有什么区别吗?例如,cd ~; cd - 和 cd ~ && cd - 似乎做了同样的事情。哪个版本更便携,例如会受到像 Android 的 shell 这样的 bash 子集的支持吗?
【问题讨论】:
标签: bash shell syntax multiplatform
如果上一个命令以; 失败,则第二个命令将运行。
但是使用&&,第二个不会运行。
这是操作之间的“惰性”逻辑“AND”操作数。
【讨论】:
; 一个还是&& 一个?还是说两者兼而有之?
&&。
sudo apt update && sudo apt upgrade而不是sudo apt update; sudo apt upgrade,对吧?
我用&&是因为很久以前在附近的电脑上:
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 * 是安全的... ;)
【讨论】:
rm -rf /tnp/test
rm /tnp/test/ -rf来防止致命的输入missclick
在cmd1 && cmd2 中,cmd2 仅在cmd1 成功时才会执行(返回 0)。
在cmd1 ; cmd2中,cmd2无论如何都会被执行。
这两种结构都是符合 POSIX 的 shell 的一部分。
【讨论】:
&& 表示如果上一个以状态 0 退出,则执行下一个命令。
相反,使用||,即如果先前的命令退出且状态不等于0,则执行;总是执行。
当您需要根据上一个命令是否正常完成而需要采取特定操作时非常有用。
【讨论】:
&&和||结合起来,那么你必须把&&放在前面。否则,如果 either 原始命令或 || 命令成功(以 0 状态退出),则执行 &&。
以; 分隔的命令将按顺序执行,无论其完成状态如何。
使用&&,第二个命令只有在第一个命令成功完成时才会执行(返回退出状态0)。
这在 Lists 下的 bash 手册页中有介绍。我希望任何类 Unix 的 shell 都支持这两个运算符,但我并不特别了解 Android shell。
【讨论】:
&& 允许条件执行,而; 始终执行第二个命令。
在例如command1 && command2、command2 只会在command1 以exit 0 终止时执行,表示一切顺利,而在command1 ; command2 中,无论command1 的结果如何,第二个命令都会始终执行。
【讨论】:
&& 在 bash 中是逻辑与。 Bash 对逻辑 AND 进行短路评估。这个成语是表达以下内容的一种更简单的方式:
cmd1;rc=$?
if [ $rc -eq 0 ]; then
cmd2
fi
而 ;版本只是:
cmd1
cmd2
【讨论】: