如何传播嵌套bash命令中的退出代码

在以下情况下

$ echo $(cat some-file-that-doesnt-exist)

如果内部命令失败,我希望外部命令失败(退出代码!= 0)。

xiangjiale 回答:如何传播嵌套bash命令中的退出代码

最干净的方法(目前也是我能想到的唯一方法,尽管如果bash有一些选项设置会短路标准流程并执行您想要的操作,这不会让我感到惊讶,但是我会讨厌如果确实存在,则使用这样的东西)是将命令分解为多个部分。那就是:

$ content=$(cat /p/a/t/h) && echo "$content"
,

如果只需要在错误时停止命令链(而不是传播其退出代码),则可以使用逻辑AND运算符&&

x=$(cat some-file-that-doesnt-exist) && echo "$x"

使用逻辑或||组合即可:

x=$(cat input.a) || x=$(cat input.b) || x=$(cat input.c) && echo "input is: $x"

echo仅在存在一个或多个文件时运行。

,

对于cat作为内部命令的情况,可以使用$(<filename结构。如果文件不存在,这将有效消除内部命令,并导致触发错误处理(设置-e,ERR陷阱等)

x=$(</path/to/file)
本文链接:https://www.f2er.com/3145645.html

大家都在问