繁体   English   中英

Bash 脚本不使用 `set -e` 捕获错误状态

[英]Bash script does not catch error status with `set -e`

有人可以解释一下为什么下面的简单脚本不会在错误状态下终止吗?

我希望false会返回错误状态并导致脚本在我使用set -e时停止

set -e
false && true
echo $?
echo Done

输出:

1
Done

这个

set -e
false
echo $?
echo Done

输出为空

您的期望不正确,这也是不真正推荐set -e一个重要原因。 set -e在非零退出状态下退出的规则有一长串例外(包括&& ),这正是因为并非所有非零退出状态都表示错误,而只是一个否定的结果。 例如, grep具有非零退出状态,仅表示未找到匹配项。

echo foo | grep bar && echo "Found bar"
echo foo | grep bar || echo "bar not found"

假设是,如果您出于任何原因( if||&&等)检查命令的退出状态,那么您预计失败的可能性,如果确实如此,这不是错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM