相关疑难解决方法(0)

递增变量会触发bash 4中的EXIT,但不会触发bash 3中的EXIT

考虑这个(示例性)bash脚本:

#!/bin/bash -e
errorExit() {
    echo "" >&2
    echo "ERROR (${var_scriptfilename}):" >&2
    echo "An unhandled error occurred." >&2
    intentionalExit 1
}
intentionalExit () {
    trap - EXIT # Unregister the EXIT trap
    exit $1
}
trap errorExit EXIT # Trap script errors
var_scriptfilename="$(basename "$0")"
# ==== START OF TEST ====
var_counter=0
((var_counter++))
echo "var_counter is $var_counter" >&2
# ===== END OF TEST =====
intentionalExit 0
Run Code Online (Sandbox Code Playgroud)

如果我在Cygwin的bash中运行它会产生预期的输出:

var_counter is 1
Run Code Online (Sandbox Code Playgroud)

但是,如果我在我的Debian Squeeze盒子上运行它,这是它的预定目的地,我最终进入了EXIT陷阱:

ERROR (test.increment.sh):
An unhandled error occurred.
Run Code Online (Sandbox Code Playgroud)

...这是为什么?

如果我删除了-e选项,它在两个系统上都按预期工作,但显然我想保持-e使用.

稍微麻烦的"通用"变体, …

bash version increment exit

9
推荐指数
1
解决办法
1196
查看次数

标签 统计

bash ×1

exit ×1

increment ×1

version ×1