在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列表和OR列表。
AND列表具有这种forms
command1 && command2
当且仅当command1返回零的退出状态时才执行command2。
[..切..]
AND和OR列表的返回状态是最后一个命令的退出状态
在列表中执行。
控制操作员是
执行控制function的令牌。 它是以下符号之一:
|| &&&; ;; ()|
\是“ 转义字符 ”,它是bash中可用的三种引用机制之一:
QUOTING 引用用于删除某些字符或单词对shell的特殊含义。 [..切..] 有三种引用机制:转义字符,单引号和双引号。 一个不带引号的反斜杠(\)是转义字符。 它保留下一个字符的字面值,除了。 如果出现\对,并且反斜杠本身不被引用,则\将被视为一个续行(即从inputstream中删除并有效忽略)。 [..切..] 只有在后面跟着以下字符之一时,反斜线才会保留其特殊含义:$,`,“,\或。
这意味着如果你把一个转义字符(“\”)放在一行的最后,你实际上就是逃避紧跟它的新行char (RETURN char),从而产生“继续行”其他人已经解释了他们的答案
我的2美分