Eu suspeito que isso seja intencional (em vez de apenas um bug). Em caso afirmativo, por favor, encaminhe-me para a documentação relevante para uma justificativa.
~$ i=0; ((i++)) && echo true || echo false
false
~$ i=1; ((i++)) && echo true || echo false
true
A única diferença entre as duas linhas é i=0
vs.i=1
Isso ocorre porque
i++
post -increment , conforme descrito emman bash
. Isso significa que o valor da expressão é o valor originali
de , não o valor incrementado.De modo a:
age como:
exceto que
i
também é incrementado; e essa:age como:
exceto que
i
é incrementado também.O valor de retorno da
(( ))
construção é verdadeiro (0
) se o valor for diferente de zero e vice-versa.Você também pode testar como o operador pós-incremento funciona:
E pré-incremento para comparação:
O valor de 'retorno' de an
((expression))
depende do pré ou pós-fixado. E então a lógica é esta:Isso significa que é invertido para ser normal, não como um valor de retorno.