我知道运算符&&
和||
在Bash中的作用。
但最近我在shell脚本中遇到了以下情况:
[[ test1 ]] && { test2 } || :
我对上述陈述中|| :
(逻辑OR后跟:
)的含义感到困惑?
有人可以详细说明吗?
答案 0 :(得分:3)
一次一步:
:
是一个内置的shell,基本上等同于true
命令。如果您有兴趣,可以很好地描述它的历史以及它如何在this question上运行。
[[ test1 ]]
测试是否存在test1
。 (通常,这将是一个变量。)
{ test2 }
在当前的shell环境中执行test2
。 (通常,这将是以换行符或分号结尾的命令列表。)
&&
的优先级高于||
。因此[[ test1 ]] && { test2 }
将在||
之前进行评估。
全部放在一起,
[[ test1 ]] && { test2 } || :
意思是:
test1
,请执行test2
test1
不存在,或test2
失败,则返回true
(即:$? == 0
)注意事项:
返回的退出代码($?
)与“return no errors”不同!如果test2
失败,您可能仍会在脚本的输出中看到错误,但整个命令的退出代码将始终为true
。
执行test2
时的错误,如果在set -e
下执行,则不会终止脚本。
答案 1 :(得分:0)
cmd || :
是一种忽略由cmd
引起的错误的方法。如果脚本是使用set -e
执行的,并且您不希望在cmd
失败的情况下被打断,则这很有用。