如果存在`set -e`指令,为什么((0))会导致Bash脚本退出?

时间:2014-06-10 18:15:59

标签: bash shell

这会输出before\n

#!/usr/bin/env bash
set -e

echo before
((0))
echo after

删除set -e或将((0))更改为((1))会使节目按预期输出before\nafter\n

为什么((0))会触发set -e退出条件?

2 个答案:

答案 0 :(得分:9)

这将解释:

((0))
echo $?
1

((1))
echo $?
0

所以这是由于(( and ))中的算术表达式评估的非零返回状态,当您使用set -e时,您的脚本正在退出。

正如help set所说:

  

-e如果命令以非零状态退出,则立即退出。

答案 1 :(得分:2)

 set -e

表示: -e Exit immediately if a command exits with a non-zero status.(参见:https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html

((0))是一个评估为1的表达式。这就是脚本退出的原因。