On Sun, Apr 23, 2017 at 3:28 PM, Florian Mayer <mayerflor...@me.com> wrote:

> What I’m saying is, that if bash does recursively apply expansion
> mechanisms on the identifiers until it can retrieve a number,
> it should do it symmetrically. That is,
> it should remember what chain of expansion had been necessary for
> a particular number to appear at the end of the expansion.
>
> So instead of
> 124 moo 123
> The echo command should produce
> bar moo 124
>
> (The expansion chain here was foo->bar->moo->123)
>
> It's because it's not really indirection, rather the content of the
> variable is evaluated:
>
> No it is really indirection. Bash even has a special (and very limited)
> syntax for that.
> Consider
> $ foo=bar; bar=moo
> You can get the string „moo“ through foo by using
> $ echo ${!foo}
>
> $ echo ${!!foo} # or something else does not work, though...
>
>
This is indirection indeed, but in arithmetic evaluation it's not.

Quoting the manual:

"The value of a variable is evaluated as an  arithmetic  expression
 when  it  is  referenced, or when a variable which has been given the
integer attribute using declare -i is assigned a value. "

Consider this:
foo=1+3
echo $foo
echo $((foo++))
echo $foo

Reply via email to