bug-bash
[Top][All Lists]
Advanced

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

Re: Curious case of arithmetic expansion


From: Pierre Gaston
Subject: Re: Curious case of arithmetic expansion
Date: Sun, 23 Apr 2017 15:43:49 +0300



On Sun, Apr 23, 2017 at 3:28 PM, Florian Mayer <address@hidden> 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

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