据我所知,在命令后使用&是为了在后台运行它。

&用法示例:tar -czf file.tar.gz dirname &

但是&&呢?(例子)


当前回答

####################### && or (Logical AND) ######################
first_command="1"
two_command="2"

if [[ ($first_command == 1) && ($two_command == 2)]];then
 echo "Equal"
fi

当程序检查if命令时,程序创建一个称为退出码的数字,如果两个条件都为真,退出码为零(0),否则,退出码为正数。仅当输出码为0(0)时显示Equal,这意味着两个条件都为真。

其他回答

&&将命令串在一起。后续命令只有在前一个命令成功时才执行。

类似地,如果前面的命令执行失败,||将允许后续的命令执行。

参见Bash Shell编程。

&&允许您根据前一个命令是否成功完成来执行某些操作—这就是为什么您倾向于将其链接为do_something && do_something_else_that_dependded_on_something的原因。

此外,你还有||这是逻辑上的或,还有;这只是一个分隔符,它不关心之前的命令发生了什么。

$ false || echo "Oops, fail"
Oops, fail

$ true || echo "Will not be printed"
$  

$ true && echo "Things went well"
Things went well

$ false && echo "Will not be printed"
$

$ false ; echo "This will always run"
This will always run

一些详细信息可以在Bash手册中的命令列表中找到。

'&&'的一个非常常见的用法是用autotools编译软件。例如:

./configure --prefix=/usr && make && sudo make install

基本上,如果配置成功,则运行make来编译,如果配置成功,则以根用户身份运行make来安装程序。当我确定事情会正常工作时,我就会使用它,它允许我做其他重要的事情,比如查看stackoverflow,而不是“监视”进度。

有时候我真的会忘乎所以……

tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf

我这样做的时候,例如做一个linux从零开始的盒子。

请看例子:

mkdir test && echo "Something" > test/file

Shell将尝试创建目录test,然后,只有当它成功时,才会尝试在其中创建文件。

因此,如果其中一个步骤失败了,您可能会中断一系列步骤。