如果我在Bash脚本中使用
set -e
,那么脚本将在以后的错误中退出。但是我对其在函数中的工作原理感到困惑。请考虑以下内容,它只会将one
打印到标准输出:set -e # Exit on error
fun(){
echo one
non_existing_command
echo two
}
fun
显然,non_existing_command
是一个错误,因此脚本在第二个 echo
之前退出。通常可以使用或运算符 ||
运行另一个命令,但仅当第一个命令失败时才会执行。也就是说,我认为以下内容将打印出 one
和 three
,但不包括 two
:
set -e # Exit on error
fun(){
echo one
non_existing_command
echo two
}
fun || echo three
但我得到的是one
和two
。也就是说,||
运算符阻止了退出(这是应该的),但它选择继续执行函数主体并忽略右侧命令。
有任何解释吗?
set -e
存在严重问题,通常应避免使用。 - John1024