考慮這個(示例性)bash腳本:如果我在Cygwin的bash的運行它遞增變量觸發EXIT在bash 4,但不是在bash 3
#!/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
它產生期望的輸出:
var_counter is 1
不過,如果我對我的Debian擠壓盒,這是它的預期目的運行它,我在出口俘獲結束:
ERROR (test.increment.sh):
An unhandled error occurred.
...爲什麼呢?
如果我刪除了-e選項,它在兩個系統上都按預期工作,但顯然我想保留-e。
稍微更繁瑣的「通用」變體var_counter=$(($var_counter+1))
適用於兩個shell都設置的-e,但我更喜歡使用第一個符號(或類似的外觀),因爲它明顯作爲增量操作突出顯示閱讀代碼時。
在Cygwin的bash的bash --version
說:
GNU bash, version 3.2.51(24)-release (i686-pc-cygwin)
Copyright (C) 2007 Free Software Foundation, Inc.
Debian的,那就是:
GNU bash, Version 4.1.5(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
我好奇,爲什麼這是這樣。有人知道這種行爲的原因嗎?
此外,有沒有人知道類似的方式來增加一個變量在bash中,我可以使用?
當你設置-vx時,你看到任何有用的東西嗎?祝你好運。 – shellter