据我所知,在命令后使用&是为了在后台运行它。
&用法示例:tar -czf file.tar.gz dirname &
但是&&呢?(例子)
据我所知,在命令后使用&是为了在后台运行它。
&用法示例:tar -czf file.tar.gz dirname &
但是&&呢?(例子)
当前回答
如果第一个语句成功结束,它将执行第二个语句。类似if语句:
if (1 == 1 && 2 == 2)
echo "test;"
它首先尝试是否1==1,如果是真的,它检查是否2==2
其他回答
此外,你还有||这是逻辑上的或,还有;这只是一个分隔符,它不关心之前的命令发生了什么。
$ 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手册中的命令列表中找到。
如果第一个语句成功结束,它将执行第二个语句。类似if语句:
if (1 == 1 && 2 == 2)
echo "test;"
它首先尝试是否1==1,如果是真的,它检查是否2==2
请看例子:
mkdir test && echo "Something" > test/file
Shell将尝试创建目录test,然后,只有当它成功时,才会尝试在其中创建文件。
因此,如果其中一个步骤失败了,您可能会中断一系列步骤。
'&&'的一个非常常见的用法是用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从零开始的盒子。
Command_1 && command_2:当Command_1执行成功后,才执行command_2。
Command_1 || command_2:在Command_1执行失败时,只执行command_2。
感觉类似于在主流编程语言中执行'if'条件,比如if (condition_1 && condition_2){…}如果condition_1为false,则省略condition_2,并且if (condition_1 || condition_2){…如果condition_1为真,}condition_2将被省略。 看,这和你编写代码时使用的技巧是一样的:)