On Fri, Jun 13, 2025 at 12:41:16 +0300, Stamatis Mavrogeorgis wrote:
>         The shorthands "++", "--", "+=1" and "-=1" in bash arithmetic
> erroneously return exit code 1 when a variable is either incremented by
> "++" or decremented by "--" from 0 or incremented by "+=1" or decremented
> by "-=1" from -1 and 1 respectively, although the variable value changes
> properly.

That's not a bug.  That's a design feature.

The exit status of an arithmetic command is 0 (true) is the result of
the arithmetic expression is non-zero.  The exit status is 1 (false)
if the expression is zero.

This mimics the logic of the C language.  It's intentional.  It allows
you to write code like:

    if ((a > 2)); then
    ...

In that case, the expression a > 2 is evaluated, and is either true,
in which case the expression evaluates to 1 and the exit status is 0,
or false, in which case the expression evaluates to 0 and the exit
status is 1.

Because that's how C does things.

By the same logic, an arithmetic command like

    ((a = 1))

is also an expression whose value is 1, and therefore the exit status
is 0.  Likewise,

    ((a = 0))

is an expression whose value is 0, and therefore the exit status is 1.

    hobbit:~$ if ((a = 0)); then echo yes; else echo no; fi
    no
    hobbit:~$ if ((a = 1)); then echo yes; else echo no; fi
    yes

All of this is intentional, and not a bug.

See also <https://mywiki.wooledge.org/BashFAQ/105#Exercises>.

Reply via email to