在 中bash
,已知set -e
在命令替换中被忽略(除非inherit_errexit
被启用)。
但是,在false
命令替换中执行命令时,set -e
不会被忽略。为什么?
代码:
set -e
shopt | grep inherit_errexit
echo hello
a=$(false)
echo world
预期的:
inherit_errexit off
hello
world
实际的:
inherit_errexit off
hello
shell returned 1
在子 shell 中它将被忽略。但在外部它不会被忽略。
整个赋值 的退出状态
a=$(false)
不为零,因此 shell 退出。