Bash : "export" 指令中的错误处理

Bash : error handling in "export" instruction

我正在使用 bash 编写脚本。

我使用 set -e 以便在一行导致错误时让脚本退出(错误)(我喜欢这种方法,我发现它不太容易出错)。我几乎总是将它与 set -u 结合使用,以便在尝试读取未定义的变量时也“引发”错误。

长期以来,它一直很有效。但是今天,我在我的脚本中发现了一个以前用“set -eu”无法捕获的错误,因为这似乎不会像往常一样引发错误。

接下来,我将使用总是returns错误的false命令(在我的脚本中这是另一个个人命令,但这使您更容易重现)。

set -eu 
A=$(false)

以上代码退出 bash 时出现错误。很酷,这就是我所期望的。

但是:

set -eu 
export A=$(false)

不会引发任何错误,bash完全没问题! 它甚至将变量 A 设置为空字符串,因此进一步读取 $A 也不会引发错误!

这对我来说真的很奇怪,有没有办法获得预期的行为,也许是 ```set`` 的另一种选择?

我可以这样做,因为它会引发错误,但我每次都必须这样写,所以它对捕获错误的用处不大:

set -eu 
A=$(false)
export A=$A

天啊bash好复杂:-)

您没有收到错误消息,因为 export 本身是成功的。我找不到行为的明确文档,但是在构建另一个命令的参数时命令替换似乎是 non-zero 退出状态不会触发 set -e 的特殊情况之一。