在使用set -e( errexit), set -u( nounset) 以及 ERR 和 EXIT 陷阱时,我观察到一些奇怪的行为。它们似乎相关,因此将它们放在一个问题中似乎是合理的。
set -u不触发 ERR 陷阱代码:
#!/bin/bash
trap 'echo "ERR (rc: $?)"' ERR
set -u
echo ${UNSET_VAR}
Run Code Online (Sandbox Code Playgroud)set -e不会改变结果set -eu在 EXIT 陷阱中使用退出代码是 0 而不是 1代码:
#!/bin/bash
trap 'echo "EXIT (rc: $?)"' EXIT
set -eu
echo ${UNSET_VAR}
Run Code Online (Sandbox Code Playgroud)set …