如果带有 EXIT 陷阱的 Bash 脚本中出现语法错误,是否可以将退出代码传播给调用者?例如,如果我有:
#! /bin/bash
set -eu
trap "echo dying!!" EXIT
echo yeah
echo $UNBOUND_VARIABLE
echo boo
然后,即使脚本没有真正成功结束,运行它也会给出退出代码 0:
$ bash test.sh
yeah
test.sh: line 8: UNBOUND_VARIABLE: unbound variable
dying!!
$ echo $?
0
但是,如果我注释掉退出陷阱,脚本将返回 1。或者,如果我用返回非零的命令(例如/bin/false
)替换未绑定变量的行,则该退出值会按照我的意愿传播。