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
的特殊情况之一。
我正在使用 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
的特殊情况之一。