Я заметил явное несоответствие в статусе возврата нотации (( ))
bash.
Рассмотрим следующее.
$> A=0
$> ((A=A+1))
$> echo $? $A
0 1
Однако использование другой известной сокращенной записи приращения дает:
$> A=0
$> ((A++))
$> echo $? $A
1 1
Если в скрипте есть встроенный set -e
, вторая нотация вызовет выход из скрипта, поскольку статус выхода ((A++))
вернул ненулевое значение. Этот вопрос был более или менее рассмотрен в этот связанный вопрос. Но, похоже, это не объясняет разницу в статусе выхода для двух обозначений ((A=A+1))
и ((A++))
.
((A++))
, похоже, возвращает 1
тогда и только тогда, когда A
равно 0
. (Отказ от ответственности: я не проводил исчерпывающих тестов. Тестировалось в bash 4.1.2 и 4.2.25). Итак, последний вопрос сводится к следующему:
Почему A=0; ((A++))
возвращает 1
?