据我所知,在命令后使用&是在后台运行它。
&用法示例: tar -czf file.tar.gz dirname &
#1楼
“ &&”的一个很常见的用法是使用自动工具编译软件。 例如:
./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时,我会这样做。
#2楼
命令行- &&的目的是什么?
在外壳中,当您看到
$ command one && command two
目的是仅在第一个命令成功时才执行&&的命令。 这是Posix shell的惯用用法,不仅在Bash中发现。
如果第一个进程失败,它旨在阻止第二个进程的运行。
进程返回0表示true,其他正数表示false
程序在退出时返回一个信号 。 如果成功退出,则应返回0;否则,请返回大于零。 这允许进程之间的通信量有限。
&&在posix shell语法中称为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列表是由运算符"&&"和"||"分隔的一个或多个管道的序列 。
列表是一个或多个AND-OR列表的序列,由运算符';'分隔 和'&'并可选地以';'结尾 , '&'或。
运算符"&&"和"||" 应当具有相同的优先级,并应以左联想性进行评估。 例如,以下两个命令仅将bar写入标准输出:
$ false && echo foo || echo bar $ true || echo foo && echo bar
在第一种情况下,false是状态为1的命令$ false $ echo $? 1
这意味着echo foo不运行 (即,将echo foo短路)。 然后执行命令echo bar 。
在第二种情况下,true退出,代码为0$ true $ echo $? 0
因此,不执行echo foo ,然后执行echo bar 。
#3楼
command_1 && command_2 :仅在成功执行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以及if (condition_1 || condition_2){...}如果condition_1为true则将忽略condition_2。 瞧,这与您编码时使用的技巧相同:)
#4楼
&&让您根据上一个命令是否成功完成执行某些操作-这就是为什么您倾向于将其链接为do_something && do_something_else_that_depended_on_something 。
#5楼
如果第一条语句成功结束,则执行第二条语句。 就像if语句:
if (1 == 1 && 2 == 2)
echo "test;"
它首先尝试1 == 1,如果是,则检查2 == 2