Xem xét việc này (điển hình) bash script:Tăng dần biến gây nên EXIT trong bash 4, nhưng không phải trong 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
Nếu tôi chạy nó trong bash Cygwin của nó tạo ra sản lượng dự kiến:
var_counter is 1
Tuy nhiên, nếu tôi chạy nó trên hộp Bóp Debian của tôi, đó là nơi dự định của mình, tôi kết thúc trong cái bẫy EXIT:
ERROR (test.increment.sh):
An unhandled error occurred.
... Tại sao vậy?
Nếu tôi xóa tùy chọn -e, nó hoạt động như mong đợi trên cả hai hệ thống, nhưng tôi muốn giữ nguyên sử dụng, rõ ràng.
Biến thể "phổ quát" hơi cồng kềnh hơn, var_counter=$(($var_counter+1))
, hoạt động với -e được đặt trên cả hai vỏ, nhưng tôi muốn sử dụng ký hiệu đầu tiên (hoặc cái gì đó tương tự) vì nó rõ ràng là một thao tác tăng khi đọc mã.
bash --version
trên bash Cygwin nói:
GNU bash, version 3.2.51(24)-release (i686-pc-cygwin)
Copyright (C) 2007 Free Software Foundation, Inc.
trên Debian, đó là:
GNU bash, Version 4.1.5(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
Tôi tò mò là tại sao đây là như vậy. Có ai biết nguyên nhân của hành vi này không?
Ngoài ra, không ai biết cách tương tự để tăng biến trong bash mà tôi có thể sử dụng?
bạn có thấy điều gì hữu ích khi bạn 'đặt -vx' không? Chúc may mắn. – shellter