逻辑OR(||)后跟Bash中的冒号

时间:2018-06-12 06:41:00

标签: bash

我知道运算符&&||在Bash中的作用。

但最近我在shell脚本中遇到了以下情况:

[[ test1 ]] && { test2 } || :

我对上述陈述中|| :(逻辑OR后跟:)的含义感到困惑?

有人可以详细说明吗?

2 个答案:

答案 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失败的情况下被打断,则这很有用。