Um comando aritmético é bem sucedido se o valor da expressão aritmética for diferente de zero. Se o valor da expressão for 0, o comando falhará com o status 1. Isso permite que os comandos aritméticos sejam usados nos testes, pois os operadores booleanos nas expressões aritméticas do shell retornam 0 para true e 1 para false (como em C). Por exemplo
if ((x==3)); then …
funciona porque ((x==3))
retorna 0 quando $x
é igual a 3 e 1 caso contrário.
O operador de incremento de postfix retorna o valor antigo da variável. Portanto, ((var++))
retornará um status de erro se var
foi anteriormente zero.
set -e
diz ao shell para sair no primeiro comando que falha. Não há surpresas lá.
Para evitar erros indesejados resultantes de expressões aritméticas que podem legitimamente ter o valor 0, não use comandos aritméticos, use uma atribuição comum com uma expressão aritmética.
var=$((var+1))