我需要使用陷阱捕获Bash脚本中的错误情况。因此,我在脚本中同时使用了set -e
和set -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)
答案 0 :(得分:6)
从4.0到4.1之间的更改日志:
x。修复了导致$?的错误。引用时无法正确设置 取消启用set -u和set -e的变量。