Linux Bash语法:&&,\和的含义 –

bash命令的末尾,“ && ”,“ \ ”和“ - ”是什么意思?

特别是,我遇到了以下将Ubuntu公共密钥添加到Ubuntu的aptitude包pipe理器中的组合,这里使用的字符是什么?

     gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \
     gpg --export --armor 26C2E075 |  sudo apt-key add  -  && \
     sudo apt-get update

“&&”用于将命令链接在一起,以便当且仅当前面的命令没有错误地退出(或者,更准确地说,以返回码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 )。 根据上下文,它通常用于指示“ 从stdin而不是从文件读取数据 ”,或者“ 将行的其余部分处理为数据而不是命令行参数 ”。

 && == 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) 

&&是逻辑AND:
&&是表示逻辑AND的一种方式,意味着只有当它的两边都是真时,整个expression式才是真的。 在逻辑上,据说当P和Q都为真时, 整个陈述(P&Q)才是真实的。

因此,计算机一般将P&Q视为短路评估 。 所以既然P和Q都是真的, 那么整个语句只会是真的, 如果P是假的,那么语句Q就不会被评估 。 基本上电脑是懒惰的(高效的),如果他们没有,也不要麻烦评估Q. 这也是正确的逻辑OR,请参阅上一个链接。

Bash中的&&的三种语境:

1)使用命令退出状态下的短路评估:
每个命令都有一个退出状态。 如果一个命令有一个错误,它有一个非零的退出状态。 因此,如果退出状态为非零值且&&用于将命令一起链接到语句中,则如果较早的命令没有退出状态为0(真),则不会评估(执行)稍后的命令。 这是因为短路评估。 所以如果你有:

 P && Q 

如果P不是真的,Q将不会被执行(如果P以0以外的任何状态退出,则不是这样)。 就像一样:

 ./configure && make 

如果configuration有错误,make不会被执行,是不正确的。 所以基本上,如果这样的话,结果是写作的一种方式:

 if ./configure ; then make fi 

请记住,在大多数情况下,0是错误的,但不是在退出状态时。

2)&&可以在Bash的内build[[]]testing命令中使用:

&&也可以在bash [[]]的内置testing命令中使用,以组合命令的方式组合expression式。 只有&&的两个操作数(两边)都是真的,整个testing操作才会成立,例如:

 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 

我认为你会更好地解释“真实”的含义,影响是另一回事:)

  • &&是“AND”控制操作符。 从bash男人
    控制操作符&&和|| 分别表示AND列表和OR列表。
     AND列表具有这种forms  
         command1 && command2     
    当且仅当command1返回零的退出状态时才执行command2。
     [..切..]
     AND和OR列表的返回状态是最后一个命令的退出状态
    在列表中执行。
    

    控制操作员

    执行控制function的令牌。 它是以下符号之一:
         ||  &&&;  ;;  ()| 
    
  • \是“ 转义字符 ”,它是bash中可用的三种引用机制之一:
     QUOTING
       引用用于删除某些字符或单词对shell的特殊含义。
     [..切..]
       有三种引用机制:转义字符,单引号和双引号。
       一个不带引号的反斜杠(\)是转义字符。 它保留下一个字符的字面值,除了。 如果出现\对,并且反斜杠本身不被引用,则\将被视为一个续行(即从inputstream中删除并有效忽略)。
     [..切..]
    只有在后面跟着以下字符之一时,反斜线才会保留其特殊含义:$,`,“,\或。
    

    这意味着如果你把一个转义字符(“\”)放在一行的最后,你实际上就是逃避紧跟它的新行char (RETURN char),从而产生“继续行”其他人已经解释了他们的答案

  • 有些命令接受参数的破折号“ ”是一个约定,而不是shell特殊的字符或运算符。 正如其他人已经指出的那样,它是标准I / Ostream的一种标志。 根据我们所提到的程序,它可能停留在stdin(标准input)或stdout(标准输出)。

我的2美分