为何Bash函数中set -e未在命令执行失败时终止函数?
问题解答
bash的set -e(即errexit选项)虽然会让脚本在命令执行失败时自动退出,但它存在几个例外场景,你遇到的就是其中之一:
- 当你在一条失败的命令之后,显式使用
$?获取其退出码时,bash会判定你有意处理这个错误状态,不会触发set -e的自动退出机制。
在你的例子里,git statu执行失败返回退出码1,但紧接着的echo $?是用来捕获上一条命令的退出状态,bash识别到这个操作后,就不会终止函数f,而是继续执行echo $?,输出1。
另外补充几个set -e不生效的常见场景,方便你理解:
- 命令作为
if、while等条件判断的一部分时 - 命令在管道中且不是最后一个命令时
- 命令用
&&或||连接,且失败的命令不是链中最后一个时
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

