我最近遇到了一些这样的脚本:
( set -e ; do-stuff; do-more-stuff; ) || echo failed
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来不错,但它不起作用!将set -e
不适用,当你添加的||
。没有它,它工作正常:
$ ( set -e; false; echo passed; ); echo $?
1
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加||
,set -e
则忽略:
$ ( set -e; false; echo passed; ) || echo failed
passed
Run Code Online (Sandbox Code Playgroud)
使用真正的、单独的 shell 可以按预期工作:
$ sh -c 'set -e; false; echo passed;' || echo failed
failed
Run Code Online (Sandbox Code Playgroud)
我已经在多个不同的 shell(bash、dash、ksh93)中尝试过这个,并且都以相同的方式运行,所以这不是一个错误。有人可以解释一下吗?