我对“ ”很好奇|| true
,写了下面这对例子。
示例#1
#!/usr/bin/env bash
rm some_random_file_that_does_not_exist
echo "End of program"
执行时 if 产生以下结果:
$ ./remove.sh
rm: cannot remove 'some_random_file_that_does_not_exist': No such file or directory
End of program
例子#2
#!/usr/bin/env bash
rm some_random_file_that_does_not_exist || true
echo "End of program"
执行时会产生以下结果:
$ ./remove.sh
rm: cannot remove 'some_random_file_that_does_not_exist': No such file or directory
End of program
我能看出的唯一区别是,在Example#1 中,尝试删除不存在文件的行的结果代码是1,而在Example#2 中,结果代码是0(零)。
我理解这个“”的方式|| true
是确保“”运算符左侧的命令的执行||
以结果代码零结束。
|| true
所以我的问题是...除了这个原因之外,还有其他原因可以证明在 Bash 中的命令末尾使用“”是合理的吗?
答案1
|| true
errexit
当设置 shell 选项时,可用于抑制出错时立即退出;该选项可以set -e
通过set -e
在脚本中显式地启用,或者通过使用显式解释器和选项调用脚本来启用:bash -e scriptname
。在sh
类似 shell 中,如bash
, :
(成功地不执行任何操作的实用程序)也可以用来代替true
, ,如|| :
。
它也可以用于具有相同目的的 Makefile 配方中。