![bash 后缀 `||:`](https://linux22.com/image/174563/bash%20%E5%90%8E%E7%BC%80%20%60%7C%7C%3A%60%20.png)
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,也确保脚本继续执行