help-bash
[Top][All Lists]
Advanced

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

Re: [Help-bash] Arithmetic evaluation / expansion question


From: Andy Chu
Subject: Re: [Help-bash] Arithmetic evaluation / expansion question
Date: Wed, 10 Oct 2018 10:25:27 -0700

Right, I have seen this very odd recursive behavior.  It doesn't appear to
be documented, but one of the very first bugs filed against OSH mentions it:

https://github.com/oilshell/oil/issues/3

In this case it's one the operands of  [[ a -eq b ]].  Not only can 'a' be
a variable that contains a varaible name, etc. -- it can be an entire
arithmetic expression.

In other words, it can be thought of as an implicit recursive 'eval'  as
well.  Basically bash tries as hard as it can to make things integers in
arithmetic contexts.  It's even more aggressive than awk or Make, which
also work with integers-as-strings.

(I chose not to copy this behavior since "important" shell scripts don't
appear to rely on it.)

Andy



On Wed, Oct 10, 2018 at 10:09 AM Greg Wooledge <address@hidden> wrote:

> On Wed, Oct 10, 2018 at 12:47:05PM -0400, Bruce Hohl wrote:
> > Are strings also evaluated to zero within $(( ))?
> >
> > $ pd=abc
> > $ echo $pd
> > abc
> > $ echo $((pd))
> > 0
>
> As Andy said, things that can be parsed as variable names are treated
> as variable names in arithmetic contexts.  What he didn't mention was
> that bash does this *recursively* until it gets to an integer, or to
> something that can't be parsed as either an integer or a variable name.
>
> wooledg:~$ a=b b=c c=d d=e e=f f=42; echo $((a))
> 42
>
>


reply via email to

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