help-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-bash] Strange behaviour of trap ERR. (( x = 0 )) is an error?


From: Pierre Gaston
Subject: Re: [Help-bash] Strange behaviour of trap ERR. (( x = 0 )) is an error?
Date: Sat, 2 Sep 2017 19:45:53 +0300

On Sat, Sep 2, 2017 at 7:42 PM, Eduardo Bustamante <address@hidden>
wrote:

> On Sat, Sep 2, 2017 at 8:54 AM, Andrew S <address@hidden> wrote:
> [...]
> > BASH_VERSION=[3.00.15(1)-release]
> [...]
> > BASH_VERSION=[4.1.2(1)-release]
>
> > Questions:
> > Why does (( x = 0 )) fire the ERR trap on the new server?
> > What can I do to stop (( x = 0 )) from being an error?
> > Is there a shell option I have set funny?
>
> FWIW, 4.1.2 is not new. It's from 2009. And 3.0.16 (which means that
> the one you were using is even older) is from 2005.
>
> (( x = 0 )) fires the ERR trap, because it's return code is greater
> than 0. Which you can see here:
>
> $ (( x = 0 )); echo $?
> 1
>
> The reason is simple. Both `let' and `((' commands return 0 if the
> arithmetical expression evaluates to `expr != 0', otherwise, they
> return 1. This is used in constructs like:
>
> if (( expr )); then ...; fi
> while (( expr )); then ...; fi
>
> It seems bash 3.0.16 was buggy, because does not exit after the `(('
> command returns an error code.
>
> $ ./bash -ec 'echo $BASH_VERSION; (( 0 )); echo $?'
> 3.00.16(2)-release
> 1
>
> $ bash -ec 'echo $BASH_VERSION; (( 0 )); echo $?'
> 4.4.12(1)-release
>
> There's not much you can do here, other than to turn off the ERR trap,
> or to disable the errexit/ERR behavior for that particular command
> with something like this:
>
> this was changed in 4.1 there is relevant thread
http://lists.gnu.org/archive/html/bug-bash/2016-08/msg00061.html

if you assign you can do var=$((...)) instead of ((var=....))


reply via email to

[Prev in Thread] Current Thread [Next in Thread]