据我所知,在命令之后使用&是为了在后台运行它。&用法示例:tar -czf file.tar.gz dirname &但是&&怎么样呢?(示例)
&
tar -czf file.tar.gz dirname &
&&
gr8qqesn1#
此外,你还有||,它是逻辑或,还有;,它只是一个分隔符,它不关心命令之前发生了什么。
||
;
$ 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手册中的命令列表中找到。
ubby3x7f2#
&&允许您根据前一个命令是否成功完成来执行某些操作-这就是为什么您倾向于将其链接为do_something && do_something_else_that_depended_on_something。
do_something && do_something_else_that_depended_on_something
r7xajy2e3#
在贝壳里,当你看到
$ command one && command two
目的是只有在第一个命令成功的情况下才执行&&后面的命令,这是Posix shell的惯用法,不仅仅在Bash中可以找到。它的目的是在第一个进程失败时阻止第二个进程的运行。你可能会注意到我使用了“意图”这个词--这是有充分理由的。不是所有的程序都有相同的行为,所以为了让它工作,你需要通过阅读文档和源代码(如果必要)来理解程序认为什么是“失败”,以及它是如何处理的。
程序在退出时返回signal。如果成功退出,则返回0,否则返回大于0的值。这允许进程之间进行有限数量的通信。&&在posix shell语法中称为AND_IF,它是and_or命令列表的一部分,该列表还包括||,它是具有类似语义的OR_IF。语法符号,引用自文档:
AND_IF
and_or
OR_IF
%token AND_IF OR_IF DSEMI /* '&&' '||' ';;' */
语法(也引用自文档)表明,任意数量的AND_IF(&&)和/或OR_IF(||)可以串在一起(因为and_or是递归定义的):
and_or : pipeline | and_or AND_IF linebreak pipeline | and_or OR_IF linebreak pipeline
这两个操作符具有相同的优先级,并且从左到右求值(它们是左结合的)。AND-OR列表是一个或多个管线的序列,这些管线由运算符"&&"和"||"分隔。列表是一个或多个“与或”列表的序列,这些列表由运算符';'和'&'分隔,并可选地以';'、'&'或结束。运算符"&&"和"||"应具有相同的优先级,并应使用左结合性进行计算。例如,以下两个命令仅将bar写入标准输出:
AND-OR
"&&"
"||"
';'
'&'
$ false && echo foo || echo bar $ true || echo foo && echo bar
1.在第一种情况下,false是以1状态退出的命令
1
$ false $ echo $? 1
这意味着**echo foo不运行**(即短路echo foo),然后执行命令echo bar。1.在第二种情况下,true以代码0退出
echo foo
echo bar
0
$ true $ echo $? 0
因此不执行X1 M26 N1 X,则执行X1 M27 N1 X。
9rnv2umw4#
'&&'的一个很常见的用法是用autotools编译软件。例如:
./configure --prefix=/usr && make && sudo make install
基本上,如果configure成功,make运行编译,如果成功,make以root身份运行安装程序。我在确信一切正常时使用它,它允许我做其他重要的事情,比如查看stackoverflow,而不是“监视”进程。有时候我真的会忘乎所以...
tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf
我这样做时,例如,使一个linux从头开始框。
ukxgm1gy5#
&&将命令串在一起。只有在前面的命令成功时,才执行后面的命令。类似地,如果前一个命令失败,||将允许执行后续命令。参见Bash Shell Programming。
wkftcu5l6#
如果第一条语句成功结束,就执行第二条语句,就像 if 语句:
if (1 == 1 && 2 == 2) echo "test;"
它首先检查1==1是否成立,如果成立,它将检查2==2是否成立。
ubbxdtey7#
参见示例:
mkdir test && echo "Something" > test/file
shell将尝试创建目录test,然后,仅当成功时才会尝试在其中创建文件。因此,如果其中一个步骤失败,您可能会中断一系列步骤。
test
9o685dep8#
command_1 && command_2:仅当命令1成功执行时才执行命令2。command_1 || command_2:仅在命令1未成功执行时执行命令2。感觉类似于主流编程语言中执行“if”条件的方式,例如,在if (condition_1 && condition_2){...}中,如果condition_1为false,则condition_2将被省略;在if (condition_1 || condition_2){...}中,如果condition_1为true,则condition_2将被省略。
command_1 && command_2
command_1 || command_2
if (condition_1 && condition_2){...}
false
if (condition_1 || condition_2){...}
true
bq3bfh9z9#
####################### && or (Logical AND) ###################### first_command="1" two_command="2" if [[ ($first_command == 1) && ($two_command == 2)]];then echo "Equal" fi
当程序检查如果命令,然后程序创建一个数字称为退出代码,如果两个条件都是真的,退出代码是零(0),否则,退出代码是正数。只有当显示等于如果退出代码产生零(0),这意味着两个条件都是真的。
9条答案
按热度按时间gr8qqesn1#
此外,你还有
||
,它是逻辑或,还有;
,它只是一个分隔符,它不关心命令之前发生了什么。关于这一点的一些细节可以在Bash手册中的命令列表中找到。
ubby3x7f2#
&&
允许您根据前一个命令是否成功完成来执行某些操作-这就是为什么您倾向于将其链接为do_something && do_something_else_that_depended_on_something
。r7xajy2e3#
命令行-
&&
的用途是什么?在贝壳里,当你看到
目的是只有在第一个命令成功的情况下才执行
&&
后面的命令,这是Posix shell的惯用法,不仅仅在Bash中可以找到。它的目的是在第一个进程失败时阻止第二个进程的运行。
你可能会注意到我使用了“意图”这个词--这是有充分理由的。不是所有的程序都有相同的行为,所以为了让它工作,你需要通过阅读文档和源代码(如果必要)来理解程序认为什么是“失败”,以及它是如何处理的。
Shell将返回值0视为true,将其他正数视为false
程序在退出时返回signal。如果成功退出,则返回0,否则返回大于0的值。这允许进程之间进行有限数量的通信。
&&
在posix shell语法中称为AND_IF
,它是and_or
命令列表的一部分,该列表还包括||
,它是具有类似语义的OR_IF
。语法符号,引用自文档:
语法(也引用自文档)表明,任意数量的
AND_IF
(&&
)和/或OR_IF
(||
)可以串在一起(因为and_or
是递归定义的):这两个操作符具有相同的优先级,并且从左到右求值(它们是左结合的)。
AND-OR
列表是一个或多个管线的序列,这些管线由运算符"&&"
和"||"
分隔。列表是一个或多个“与或”列表的序列,这些列表由运算符
';'
和'&'
分隔,并可选地以';'
、'&'
或结束。运算符
"&&"
和"||"
应具有相同的优先级,并应使用左结合性进行计算。例如,以下两个命令仅将bar写入标准输出:1.在第一种情况下,false是以
1
状态退出的命令这意味着**
echo foo
不运行**(即短路echo foo
),然后执行命令echo bar
。1.在第二种情况下,true以代码
0
退出因此不执行X1 M26 N1 X,则执行X1 M27 N1 X。
9rnv2umw4#
'&&'的一个很常见的用法是用autotools编译软件。例如:
基本上,如果configure成功,make运行编译,如果成功,make以root身份运行安装程序。我在确信一切正常时使用它,它允许我做其他重要的事情,比如查看stackoverflow,而不是“监视”进程。
有时候我真的会忘乎所以...
我这样做时,例如,使一个linux从头开始框。
ukxgm1gy5#
&&
将命令串在一起。只有在前面的命令成功时,才执行后面的命令。类似地,如果前一个命令失败,
||
将允许执行后续命令。参见Bash Shell Programming。
wkftcu5l6#
如果第一条语句成功结束,就执行第二条语句,就像 if 语句:
它首先检查1==1是否成立,如果成立,它将检查2==2是否成立。
ubbxdtey7#
参见示例:
shell将尝试创建目录
test
,然后,仅当成功时才会尝试在其中创建文件。因此,如果其中一个步骤失败,您可能会中断一系列步骤。
9o685dep8#
command_1 && command_2
:仅当命令1成功执行时才执行命令2。command_1 || command_2
:仅在命令1未成功执行时执行命令2。感觉类似于主流编程语言中执行“if”条件的方式,例如,在
if (condition_1 && condition_2){...}
中,如果condition_1为false
,则condition_2将被省略;在if (condition_1 || condition_2){...}
中,如果condition_1为true
,则condition_2将被省略。bq3bfh9z9#
当程序检查如果命令,然后程序创建一个数字称为退出代码,如果两个条件都是真的,退出代码是零(0),否则,退出代码是正数。只有当显示等于如果退出代码产生零(0),这意味着两个条件都是真的。