bash 后缀 `||:`

bash 后缀 `||:`

bash 中的语法是什么||:做?


例子

$ ls foo ||:

除了总是返回成功之外,这还有什么特别之处吗?

$ ls foo ||:; echo $?即使ls foo因为foo不存在而失败,输出是否始终为零?

我在一个以 开头的脚本中看到了它set -e。所以我猜测它确保不会发生错误,因此脚本不会立即退出,即使以此后缀的命令返回错误。

答案1

仅当之前的命令未返回成功时,它才会返回成功。

使用set -e(又名set -o errexit),返回错误的命令行将中止脚本。如果将其添加||:到命令行末尾,则不会出现错误(因为如果有错误,下一个命令将返回 true)。

它基本上是说:如果上一个命令中有错误,请运行true,以便命令行结束而不会出现错误,并且脚本可以继续运行。

该脚本将中止而不显示日期,因为ls返回错误:

set -e
ls -l /tmp/nonexistentfile
date

但该脚本不会中止,并且会显示日期,因为最后一个命令是:( true):

set -e
ls -l /tmp/nonexistentfile || :
date

答案2

这里有两个独立的语法:

||  This is the OR symbol. 
:   This is a dummy command which will return a success (return code 0)

与命令结合使用,其效果是首先运行该命令并使该行返回“成功”,而不管第一个命令的返回代码如何。由于该命令将返回 True,因此:将返回 OR(不成功执行任何操作)。

如果脚本中的任何语句返回 False,则单独set -e具有退出脚本的效果。因此,||:充当“守卫”,即使该行上的命令返回 False,也确保脚本继续执行

相关内容