Linux Bash 语法:&&、\ 和 - 的含义

Linux Bash 语法:&&、\ 和 - 的含义

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(标准输出)。

我的看法

相关内容