[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: increment & decrement error when variable is 0
From: |
Jetzer, Bill |
Subject: |
RE: increment & decrement error when variable is 0 |
Date: |
Tue, 24 Nov 2020 14:19:24 +0000 |
Thank you for the clarification. I understand now.
--bill
From: Ilkka Virta <itvirta@gmail.com>
Sent: Tuesday, November 24, 2020 2:08 AM
To: Jetzer, Bill <jetzerb@svaconsulting.com>
Cc: bug-bash@gnu.org
Subject: Re: increment & decrement error when variable is 0
On Tue, Nov 24, 2020 at 12:07 AM Jetzer, Bill
<jetzerb@svaconsulting.com<mailto: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.
CAUTION: This email originated from outside of the organization. Do not click
links or open attachments unless you recognize the sender and know the content
is safe.
CONFIDENTIAL : This transmission may contain information that is privileged,
confidential and/or exempt from disclosure under applicable law. If you are not
the intended recipient, you are hereby notified that any disclosure, copying,
distribution, or use of the information contained herein (including any
reliance thereon)is strictly prohibited. If you received this transmission in
error, please immediately contact the sender and destroy the material in its
entirety, whether in electronic or hard copy format.