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