David Asked: 2018-02-28 05:58:58 +0800 CST2018-02-28 05:58:58 +0800 CST 2018-02-28 05:58:58 +0800 CST Bash 导出忽略 set -ex 772 我今天遇到了一些奇怪的行为: #!/bin/bash set -ex export a=$(cat foo) echo "It's a living thing" b=$(cat foo) echo "This won't make it" cat foo即使foo不存在,这也不会停止。但是没有导出,它会失败。为什么? bash shell 1 个回答 Voted Best Answer Stéphane Chazelas 2018-02-28T06:04:22+08:002018-02-28T06:04:22+08:00 在: a=$(cmd) 这是一个没有命令部分的简单命令,所以退出状态是命令替换的状态。在: a=$(cmd) export a 或者 export a="$(cmd)" 这里有一个命令部分(即使在某些 shell 中,export位于命令和关键字之间),因此返回它的退出状态。如果cmd失败并且不产生任何输出export a=,仍然会运行并成功,因此export将返回 0 退出状态。 在这里你想要: a=$(cmd) export a 或者更好的是,摆脱不可靠的情况set -e并手动进行适当的错误处理: a=$(cmd) || exit export a 参见例如BashFAQ 015:“为什么 set -e 没有达到我的预期?” 有关为什么以及如何set -e产生意外结果的更多示例。
在:
这是一个没有命令部分的简单命令,所以退出状态是命令替换的状态。在:
或者
这里有一个命令部分(即使在某些 shell 中,
export
位于命令和关键字之间),因此返回它的退出状态。如果cmd
失败并且不产生任何输出export a=
,仍然会运行并成功,因此export
将返回 0 退出状态。在这里你想要:
或者更好的是,摆脱不可靠的情况
set -e
并手动进行适当的错误处理:参见例如BashFAQ 015:“为什么 set -e 没有达到我的预期?” 有关为什么以及如何
set -e
产生意外结果的更多示例。