[英]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.