bash命令末尾的“ &&
”,“ \
”和“ -
”是什么意思?
特别是,我遇到了以下几行组合,这些行应该将公共密钥添加到Ubuntu的aptitude软件包管理器中,这些字符是用来做什么的?
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \ gpg --export --armor 26C2E075 | sudo apt键添加-&& \ sudo apt-get更新
bash命令末尾的“ &&
”,“ \
”和“ -
”是什么意思?
特别是,我遇到了以下几行组合,这些行应该将公共密钥添加到Ubuntu的aptitude软件包管理器中,这些字符是用来做什么的?
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \ gpg --export --armor 26C2E075 | sudo apt键添加-&& \ sudo apt-get更新
Answers:
“ &&”用于将命令链接在一起,以便在且仅当前一个命令无错误退出(或更准确地说,返回码为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而不是从文件中读取数据 ”,或“ 将行的其余部分作为数据而不是命令行参数进行处理 ”。
&&是逻辑AND:
&&是表示逻辑AND的一种方式,这意味着仅当表达式的两面都为真时,整个表达式才为True。从逻辑上说,只有P和Q都为真时,整个语句(P&Q)才为真。
结果,计算机通常将P&Q视为短路评估。如此以来,整个语句只会是TRUE,如果P和Q是真实的,那么,如果P是假的,语句Q不是评估。基本上,计算机是惰性的(高效的),并且如果计算机也没有,则不必理会Q。逻辑或也是如此,请参阅上一个链接。
Bash中&&的三个上下文:
1)将短路评估与命令的退出状态一起使用:
每个命令都有退出状态。如果命令有错误,则退出状态为非零。因此,如果退出状态为非零,并且&&用于将命令链接到一条语句中,则如果较早的命令的退出状态不为0(正确),则不会评估(执行)后面的命令。这是由于短路评估。因此,如果您有:
P && Q
如果P不为真,则Q将不会执行(如果P以0以外的任何状态退出,则它不为真)。与以下内容相同:
./configure && make
如果configure出错,则不会执行make。因此,基本上,然后最终成为if语句的一种写入方式:
if ./configure ; then
make
fi
请记住,在大多数情况下,0为假,但在退出状态时为0。
2)&&可以在Bash的内置[[]]测试命令中使用:
&&也可以在bash [[]]的内置测试命令内部使用,以类似于组合命令的方式组合表达式。仅当&&的两个操作数(面)都为true时,整个测试操作才为true,例如:
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
可以说$ a是2到5之间的整数(不包括2到5)。
3)算术评估:
最后,&&可在逻辑运算中用作逻辑AND。如果以下两个数字(逻辑与)都不为零,则返回0,否则返回1:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0
if [./configure]
示例中,您应该删除括号。正确的是if ./configure; then make...
我认为您最好对“真实”的含义进行解释,暗示是另一回事:)
控制运算符&&和|| 分别表示AND列表和OR列表。 AND清单的格式 command1 && command2 仅当command1返回退出状态为零时,才能执行command2。 [..切..] AND和OR列表的返回状态是最后一条命令的退出状态 在列表中执行。一个控制操作是
执行控制功能的令牌。它是以下符号之一: || &&&; ;; ()|
\
是“ 转义字符 ”,它是bash中可用的三种引用机制之一:
报价 引用用于将某些字符或单词的特殊含义删除。 [..切..] 共有三种报价机制:转义符,单引号和双引号。 不带引号的反斜杠(\)是转义字符。它会保留下一个字符的字面值,但除外。如果出现一个\对,并且反斜杠本身未加引号,则\被视为行的延续(即,它已从输入流中删除并被有效忽略)。 [..切..] 仅当反斜杠后面跟随以下字符之一时,才保留其特殊含义:$,`,“,\或。这意味着,如果在行的末尾添加转义字符(“ \”),则实际上是在转义紧随其后的新行字符(RETURN字符),从而具有“继续行”的作用。其他人已经在他们的答案中解释了
我的2美分