在以下情况下
$ echo $(cat some-file-that-doesnt-exist)
如果内部命令失败,我希望外部命令失败(退出代码!= 0)。
最干净的方法(目前也是我能想到的唯一方法,尽管如果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)