在 bash 中,语法有||:什么作用?
例子
$ ls foo ||:
Run Code Online (Sandbox Code Playgroud)
除了总是返回成功之外,这还有什么特别之处吗?
$ ls foo ||:; echo $?即使ls foo由于foo不存在而失败,输出是否始终为零?
我在一个以set -e. 所以我猜它可以确保不会发生错误,因此脚本不会立即退出,即使以 this 为后缀的命令返回错误。
如果之前的命令没有返回成功,它只会返回成功。
使用set -e(aka set -o errexit),返回错误的命令行将中止脚本。如果将此添加||:到命令行的末尾,则不会出现错误(因为,如果存在,下一个命令将返回 true)。
它基本上是说:如果上一个命令中有错误,请运行,true以便命令行结束而没有错误并且脚本可以继续运行。
此脚本将中止而不显示日期,因为ls返回错误:
set -e
ls -l /tmp/nonexistentfile
date
Run Code Online (Sandbox Code Playgroud)
但是这个脚本不会中止,它会显示日期,因为最后一个命令是:( true):
set -e
ls -l /tmp/nonexistentfile || :
date
Run Code Online (Sandbox Code Playgroud)
这里有两个独立的语法:
|| This is the OR symbol.
: This is a dummy command which will return a success (return code 0)
Run Code Online (Sandbox Code Playgroud)
与命令结合使用,其效果是首先运行该命令并使该行返回“成功”,而不管第一个命令的返回代码如何。由于该命令将返回 True,因此:将返回 OR(不成功执行任何操作)。
如果脚本中的任何语句返回 False,则单独set -e具有退出脚本的效果。因此||:,充当“守卫”,即使该行上的命令返回 False,也确保脚本继续执行
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |