为什么Bash陷阱不捕获未定义变量的退出状态?

pdi*_*aso 8 bash

我需要使用陷阱捕获Bash脚本中的错误条件.出于这个原因,我在我的脚本中都有set -eAND set -u.但是我注意到脚本中定义的陷阱没有得到错误状态.例如:

set -e
set -u

on_exit() {
  exit_status=$?
  echo exit_status=$exit_status
  exit $exit_status
}

trap on_exit EXIT

X=$Y
Run Code Online (Sandbox Code Playgroud)

上面的代码段打印:

line 12: Y: unbound variable
exit_status=0
Run Code Online (Sandbox Code Playgroud)

而我期望错误状态为非零.删除后set -e,错误状态被正确报告为1.

这是什么原因?

Bash版本:GNU bash,版本3.2.57(1)-release(x86_64-apple-darwin15)

che*_*ner 6

从4.0到4.1之间的更改日志:

X.修正了导致$的错误?使用set -u和set -e enabled引用未设置的变量时未正确设置.