据我所知,在命令后使用&
是为了在后台运行它。
&
用法示例:tar -czf file.tar.gz dirname &
但&&
怎么样? (看看这个例子:https://serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188)
答案 0 :(得分:355)
&&
允许您根据前一个命令是否成功完成来执行某些操作 - 这就是为什么您倾向于将其链接为do_something && do_something_else_that_depended_on_something
。
答案 1 :(得分:330)
此外,您还有||
这是逻辑或者;
,它只是一个分隔符,它不关心以前命令发生的事情。
$ 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手册中的Lists of Commands。
答案 2 :(得分:89)
命令行 -
&&
的目的是什么?
在shell中,当你看到
$ command one && command two
意图是仅在第一个命令成功时才执行&&
之后的命令。这是Posix shell的惯用语,不仅仅是在Bash中找到的。
如果第一个进程失败,它打算阻止第二个进程的运行。
程序在退出时返回signal。如果它们成功退出,它们应返回0,否则返回大于零。这允许进程之间进行有限的通信。
&&
中AND_IF
被称为||
,posix shell grammar是and_or
list命令的一部分,其中还包含OR_IF
具有类似语义的%token AND_IF OR_IF DSEMI
/* '&&' '||' ';;' */
。
语法符号:
and_or : pipeline | and_or AND_IF linebreak pipeline | and_or OR_IF linebreak pipeline
语法:
$ false && echo foo || echo bar $ true || echo foo && echo bar
两个运算符具有相同的优先级,并且从左到右进行求值(它们是左关联的)例如,以下内容:
bar
仅回显1
。
在第一种情况下,false是退出状态为$ false
$ echo $?
1
echo foo
表示 echo foo
无法运行(即短路echo bar
)。然后执行命令0
。
在第二种情况下,真实退出时代码为$ true
$ echo $?
0
echo foo
因此echo bar
未执行,然后执行selenium
。
答案 3 :(得分:30)
'&&'的常见用法用autotools编译软件。例如:
./configure --prefix=/usr && make && sudo make install
基本上,如果配置成功,则运行make以进行编译,如果成功,则以root身份运行make以安装程序。当我确信事情会起作用时,我会使用它,它允许我做其他重要的事情,比如看看stackoverflow而不是'监视'进度。
有时候我真的被带走了......
tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf
我这样做的时候,例如从头开始制作一个linux。
答案 4 :(得分:17)
答案 5 :(得分:8)
参见示例:
mkdir test && echo "Something" > test/file
Shell将尝试创建目录test
,然后只有在成功时才会尝试在其中创建文件。
因此,如果其中一个步骤失败,您可以中断一系列步骤。
答案 6 :(得分:6)
command_1 && command_2
:仅在command_1成功执行时执行command_2。
command_1 || command_2
:仅在command_1未成功执行时执行command_2。
感觉类似于'如果'条件在主流编程语言中执行,例如,if (condition_1 && condition_2){...}
如果condition_1为false
,则条件__2将被省略;如果条件_1为if (condition_1 || condition_2){...}
,则true
条件__2将被省略。
看,它与你用于编码的技巧相同:)
答案 7 :(得分:5)
如果第一个语句成功结束,则执行第二个语句。像if语句一样:
if (1 == 1 && 2 == 2)
echo "test;"
如果1 == 1则首次尝试,如果为真则检查2 == 2
答案 8 :(得分:1)
####################### && or (Logical AND) ######################
first_command="1"
two_command="2"
if [[ ($first_command == 1) && ($two_command == 2)]];then
echo "Equal"
fi
当程序检查命令是否存在时,程序将创建一个称为退出代码的数字,如果两个条件均成立,则退出代码为零(0),否则,退出代码为正数。仅当显示退出代码为零(0)时表示等于时,这意味着两个条件都为真。