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

时间:2018-07-03 12:03:46

标签: bash

我需要使用陷阱捕获Bash脚本中的错误情况。因此,我在脚本中同时使用了set -eset -u。但是,我注意到脚本中定义的陷阱没有得到错误状态。例如:

set -e
set -u

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

trap on_exit EXIT

X=$Y

上面的代码段打印出来:

line 12: Y: unbound variable
exit_status=0

我希望错误状态为非零。删除set -e后,错误状态将正确报告为1。

这是什么原因?

bash版本:GNU bash,版本3.2.57(1)-发行版(x86_64-apple-darwin15)

1 个答案:

答案 0 :(得分:6)

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

  

x。修复了导致$?的错误。引用时无法正确设置       取消启用set -u和set -e的变量。