0
为了把事情说清楚,我想我的短bash脚本:庆典“-e”益智游戏:脚本文件结束意外
#!/bin/bash -e
p_time=$(expr 0 - 0)
echo ?
echo "process time(sec) is: " ${p_time}
之前“回声?”,但如果我改变“p_time =文件将结束$(expr 0 - 0)“改为”p_time = $(expr 3 - 0)“,文件将正确结束。
但是,如果我在第一句中删除了“-e”,则文件也会正确结束。
为什么会发生这种情况?
这是很多人推荐不使用'-e'选项的原因之一;非零退出代码并不总是表示*错误*。 – chepner
如果您有任何关于'set -e'的行为是否理智和可预测的问题,请考虑参加[BashFAQ#105](http://mywiki.wooledge.org/BashFAQ/105)中的练习,或者顺便说一下,在https://www.in-ulm.de/~mascheck/various/set-e/ –
顺便说一下,表格显示了不同shell的实现之间的不兼容问题。另外,'expr'是1970年代的遗迹,应该不能用于现代脚本。 ''p_time = $((0 - 0))''可以保证符合1991 POSIX.2标准的每一个shell,并且* *效率更高(因为它避免了fork()从子进程中退出)。 –