[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: increment & decrement error when variable is 0
From: |
Ilkka Virta |
Subject: |
Re: increment & decrement error when variable is 0 |
Date: |
Tue, 24 Nov 2020 10:08:18 +0200 |
On Tue, Nov 24, 2020 at 12:07 AM Jetzer, Bill <jetzerb@svaconsulting.com>
wrote:
> ((--x)) || echo "err code $? on --x going
> from $i to $x";
>
> err code 1 on ++x going from -1 to 0
>
That's not about --x, but of the ((...)) construct:
"" (( expression ))
The arithmetic expression is evaluated according to the rules described
below (see Shell Arithmetic). If the value of the expression is non-zero,
the return status is 0; otherwise the return status is 1. This is exactly
equivalent to let "expression" See Bash Builtins, for a full description of
the let builtin.""
https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html#Conditional-Constructs
Note the second sentence and try e.g.:
$ if (( 100-100 )); then echo true; else echo false; fi
false
That also matches how truth values work in e.g. C, where you could write if
(foo) { ... } to test if foo is nonzero.
Also, consider the return values of the comparison operators. The behaviour
here makes it possible to implement
them by just returning a number, instead of having to deal with a distinct
boolean type that would affect the exit status:
$ (( a = 0 < 1 )); echo $a
1
> err code 1 on x++ going from 0 to 1
As to why you get this here, when going to one instead of zero, remember
the post-increment returns the original value.