Incrementar uma variável aciona EXIT na festança 4, mas não na festança 3
Considere este script de exemplo (exemplar):
#!/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
Se eu executá-lo na festança de Cygwin, ele produz a saída pretendida:
var_counter is 1
No entanto, se eu executá-lo na minha caixa Debian Squeeze, que é o destino pretendido, acabo na armadilha EXIT:
ERROR (test.increment.sh):
An unhandled error occurred.
...Por que é que
Se eu remover a opção -e, ela funcionará conforme o esperado nos dois sistemas, mas quero mantê-la em uso, obviament
A variante "universal" um pouco mais complicada,var_counter=$(($var_counter+1))
, funciona com -e sendo definido nos dois shells, mas eu preferiria usar a primeira notação (ou algo parecido), pois ela se destaca claramente como uma operação de incremento ao ler o códig
bash --version
na festa Cygwin diz:
GNU bash, version 3.2.51(24)-release (i686-pc-cygwin)
Copyright (C) 2007 Free Software Foundation, Inc.
No Debian, é:
GNU bash, Version 4.1.5(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
Estou intrigado com o motivo de ser assim. Alguém sabe a causa desse comportamento?
Além disso, alguém sabe de uma maneira semelhante para incrementar uma variável no bash que eu poderia usar?