当我查看bash脚本代码时,我有时会看到|
,有时会看到||
,但我不知道哪个更适合。
我试图做类似的事情。
set -e;
ret=0 && { which ansible || ret=$?; }
if [[ ${ret} -ne 0 ]]; then
# install ansible here
fi
请告知在此方案中首选哪个OR运算符。
答案 0 :(得分:6)
|
根本不是OR运算符。但可以使用||
:
which ansible || {
true # put your code to install ansible here
}
这相当于if
:
if ! which ansible; then
true # put your code to install ansible here
fi
顺便说一句 - 考虑养成使用type
(内置shell)而不是which
(外部命令)的习惯。 type
速度更快,对shell行为有了更好的理解:如果你有一个ansible
命令由一个调用真实命令的shell函数提供,which
将不知道它就在那里,但type
会正确地将其检测为可用。
答案 1 :(得分:1)
使用单个管道(一个命令的管道输出用作下一个命令的输入)和过程控制OR(双管道)之间存在很大差异。
cat /etc/issue | less
这会在/ etc / issue文件上运行cat命令,而不是立即将输出发送到stdout,而是将其作为less命令的输入。是的,这不是一个很好的例子,因为你可以简单地做更少的/ etc / issue - 但至少你可以看到它是如何工作的
touch /etc/testing || echo Did not work
对于这个,触摸命令运行或尝试运行。如果它具有非零退出状态,则双管道OR启动,并尝试执行echo命令。如果touch命令有效,则不会尝试其他选择(在这种情况下我们的echo命令)......