bash 命令末尾的‘ &&
’、‘ \
’和‘ ’是什么意思?-
具体来说,我遇到了以下几行组合,它们应该将公钥添加到 Ubuntu 的 aptitude 包管理器中,这些字符在这里有什么用途?
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \ gpg --export --armor 26C2E075 | sudo apt-key 添加 - && \ sudo apt-get 更新
答案1
“&&”用于将命令链接在一起,使得当且仅当前一个命令无错误退出(或者更准确地说,以返回代码 0 退出)时才会运行下一个命令。
“\”单独放在行尾是连接两行的一种方法。因此,以下两行:
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \
gpg --export --armor 26C2E075
处理方式与将该行写为单行完全相同:
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && gpg --export --armor 26C2E075
“-”是没有特定 bash 函数的命令行参数。具体如何处理取决于正在运行的命令(在本例中apt-key根据上下文,它通常用于表示“从标准输入而不是文件读取数据“, 或者 ”将该行的剩余部分作为数据而不是命令行参数进行处理“。
答案2
&& == if the first command succeeded, run the next one
\ == the next line is part of the first line, not two seperate lines
- == read the input from stdin (console)
答案3
&& 是逻辑与:
&& 是一种表达方式逻辑与,这意味着只有当表达式两边都为真时,整个表达式才为真。在逻辑上,全部的语句(P&Q)仅当 P 和 Q 同时为真时才为真。
因此,计算机通常将 P&Q 视为短路评估。因此,由于只有当 P 和 Q 都为真时整个语句才为真,如果 P 为假,则语句 Q 不会被评估。基本上,计算机是懒惰的(高效的),如果没有必要,它们不会费心去评估 Q。逻辑或也是如此,请参阅上一个链接。
Bash 中 && 的三种上下文:
1)使用命令退出状态的短路评估:
每个命令都有退出状态。如果命令有错误,则其退出状态为非零。因此,如果退出状态为非零,并且使用 && 将命令链接在一起形成一个语句,则如果前一个命令的退出状态不是 0(真),则后面的命令将不会被评估(执行)。这是因为短路评估。因此,如果您有:
P && Q
如果 P 不为真,则不会执行 Q(如果 P 以非 0 状态退出,则不为真)。与以下情况相同:
./configure && make
如果 configure 出现错误,则 make 将不会执行,因为结果不为真。因此,基本上,then 最终成为一种在 if then 语句中写入的方式:
if ./configure ; then
make
fi
请记住,在大多数情况下 0 是假的,但在退出状态时则不然。
2)&& 可以在 Bash 的内置 [[ ]] 测试命令中使用:
&& 也可以在 bash 内置的 test 命令 [[ ]] 中使用,以与组合命令类似的方式组合表达式。只有当 && 的两个操作数(两侧)都为真时,整个测试操作才会为真,例如:
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
可以表示 $a 是否是 2 到 5 之间的整数(不包括 2 和 5)。
3)算术评估:
最后,&& 可以在算术评估中用作逻辑与。如果两个都(逻辑与)以下数字非零,则返回 0,否则返回 1:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0
答案4
我认为你最好解释一下“真正”的含义,含义是另一回事:)
- &&是“AND”控制运算符。从打击人:
控制运算符 && 和 || 分别表示 AND 列表和 OR 列表。 AND 列表的形式为 命令1 && 命令2 当且仅当 command1 返回退出状态零时,才会执行 command2。 [..切..] AND 和 OR 列表的返回状态是最后一个命令的退出状态 列表中执行。
A控制操作员是执行控制功能的标记。它是以下符号之一: || & && ; ;; ()|
\
是个 ”转义字符",它是 bash 中三种可用的引用机制之一:引用 引用用于删除某些字符或单词对于 shell 的特殊含义。 [..切..] 有三种引用机制:转义字符、单引号和双引号。 未加引号的反斜杠 (\) 是转义字符。它保留其后下一个字符的字面值,但 除外。如果出现 \ 对,并且反斜杠本身未加引号,则 \ 被视为行延续(即,它会从输入流中删除并被有效忽略)。 [..切..] 反斜杠仅当后面跟着下列字符之一时才保留其特殊含义:$、`、"、\ 或 。
这意味着如果你在一行的末尾放置一个转义字符(“\”),那么你实际上转义新行字符紧随其后的(RETURN 字符),从而具有“继续该行”的效果,其他人已经在他们的答案中解释过了- 破折号字符“-一些命令接受为参数的“”是一种约定,而不是 shell 特殊字符或运算符。正如其他人已经指出的那样,它是标准 I/O 流的一种位置标记。根据我们引用的程序,它可能保留为 stdin(标准输入)或 stdout(标准输出)。
我的看法