这将输出
before\n
:#!/usr/bin/env bash
set -e
echo before
((0))
echo after
移除set -e
或将((0))
更改为((1))
会使程序按预期输出before\nafter\n
。
为什么((0))
会触发set -e
的退出条件?
(( 0 ))
(计算环境)和(exit 0;)
(标准退出状态环境)是不同的原因。 - Charles Duffy((0))
的计算结果为 1 == 失败。注意这种差异对于回答问题至关重要。也许这只是 @Dariusz 的笔误,至少我相信我们都同意((0)) 是一个计算结果为 0 的表达式
这一说法需要进一步解释才能理解。 - Dr. Jan-Philip Gehrcke(( ))
的全部意义,这就是为什么将该表达式评估为退出状态1是shell实现正确的事情 - 它从数字上下文(内部)转换为shell上下文(外部)。 - Charles Duffy