bash-set -e和短期测试

前端之家收集整理的这篇文章主要介绍了bash-set -e和短期测试前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我是新的shell脚本,我使用了很多简短的测试,而不是if语句,如false&&真正。

后来我学会了使用set -e,发现我的脚本由于某种原因而死亡,如果我用完整的if语句替换了短测试,它们会工作。现在,时间已经过去了,我仍然使用完整的if语句。

最有趣的是,如果我打开一个交互式shell并执行以下操作:

set -e
false && true
echo $?

它返回1但是shell不会死!

我看到我一直在浪费太多的代码行。任何人都可以向我解释如何安全地使用set -e与短测试,例如。没有脚本死吗?

Single UNIX Specification描述了set -e的效果

When this option is on,if a simple command fails for any of the reasons listed in Consequences of Shell Errors or returns an exit status value >0,and is not part of the compound list following a while,until,or if keyword,and is not a part of an AND or OR list,and is not a pipeline preceded by the ! reserved word,then the shell shall immediately exit.

如您所见,AND列表中的失败命令不会使shell退出

使用set -e

使用set -e启动shell脚本被认为是最佳实践,因为如果出现某些错误,通常会更安全地中止脚本。如果一个命令可能无害化,我通常会追加||真的

这是一个简单的例子:

#!/bin/sh
set -e

# [...]
# remove old backup files; do not fail if none exist
rm *~ *.bak || true

猜你在找的Bash相关文章