函数调用中 set -e 的行为

pad*_*ura 5 bash shell-script exit error-handling

我在以下 bash 脚本中遇到 -e 标志的异常问题:

#!/bin/bash -e
foo() { return 1; }
bar() { foo; bar; }
bar || exit 1
Run Code Online (Sandbox Code Playgroud)

即,即使 foo 函数返回 1,脚本也不会终止。但是在删除 '|| 后 exit 1' 部分此脚本按预期工作 - 它在第一次 foo 执行后失败。

#!/bin/bash -e
foo() { return 1; }
bar() { foo; bar; }
bar
Run Code Online (Sandbox Code Playgroud)

编辑:测试的 bash 版本:GNU bash,版本 4.1.2(2)-release (x86_64-redhat-linux-gnu) GNU bash,版本 4.4.12(1)-release (x86_64-pc-linux-gnu)