关于shell:bash” -e”难题:脚本文件意外结束

bash “-e” puzzler: script file ended unexpectedly

本问题已经有最佳答案,请猛点这里访问。

为了清楚起见,我将缩短bash脚本:

1
2
3
4
5
#!/bin/bash -e  

p_time=$(expr 0 - 0)
echo ?
echo"process time(sec) is:" ${p_time}

该文件将在" echo?"之前结束,但是如果我将" p_time = $(expr 0-0)"更改为" p_time = $(expr 3-0)",该文件将正确结束。
但是,如果我在第一句中删除了"-e ",那么文件也正确地结束了。
为什么会这样?


bash -e表示Exit immediately if a command exits with a non-zero status.

0 - 0的结果为0,因此expr 0 - 0的退出代码为1,Bash将立即退出。如果删除-e,则Bash将忽略expr 0 - 0的退出代码,并将执行脚本中的所有命令。