如果这是重复的帖子,我们深表歉意。我确实尝试搜索看看是否有人已经问过/回答过这个问题,但没有找到任何东西。
||
bash 中的意思是什么?例如,在研究解决驱动程序问题的步骤时,我遇到了以下命令:
modprobe -q vmxnet3 && echo "vmxnet3 installed" || echo "vmxnet3 not installed"
我知道第一部分是查询 modprobe 并返回“vmxnet3 安装”的响应(如果它收到成功的返回代码)...但是...最后一部分在做什么?
答案1
||
是或运算符。仅当左侧命令返回错误时,它才执行右侧命令。看&& 和 || 的使用令人困惑运营商。
我认为你的例子不是正确的 bash。右侧的部分(这是固定的。)||
缺少echo
命令。
答案2
就像&&
,||
是一场狂欢控制操作员:
&&
表示执行后面的语句除非前面的语句执行成功(返回退出代码零)。||
表示执行后面的语句除非前面的语句失败(返回非零退出代码)。
其他一些控制运算符是:
&
表示在后台执行前面的语句。;
表示执行前面的语句,完成后继续执行下一条语句。|
表示执行前面的语句并将其标准输出连接到后面语句的标准输入。
结合&&
和||
&&
可以||
组合起来替代 if-then-else。考虑:
if some_command
then
echo yes
else
echo no
fi
上面的内容类似于:
some_command && echo yes || echo no
我说“相似”而不是相同,因为在命令失败的情况下两者是不同的echo yes
。如果echo yes
命令失败(以非零返回代码退出),则echo no
执行该命令。该版本不会发生这种情况if-then-else-fi
。echo
但是,只有当终端上出现写入错误时,该命令才会失败。因此,这种差异并不重要,并且&&
and||
形式经常被用作捷径。
答案3
这是一个“或”条件。
对于一个简化的例子,让我们看看
cmd1 || cmd2
发生的情况是,如果 cmd1 成功(即退出代码 0),则 cmd2 将不会执行。仅当 cmd1 失败时才会执行 cmd2。
这就是返回退出代码如此重要的原因之一。
顺便说一句,这个功能存在于非常古老的 UNIX shell 中,因为旧的 sh 中没有 IF 语句。这当然是在 csh 存在之前。