On 4/23/17 8:28 AM, Florian Mayer 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's not a reasonable expectation. Here's how it works. When bash reads a token, such as `foo', it reads it as a string. In contexts where it needs a variable name, such as the left side of an assignment, it remains a string. When it needs to be treated as a value, such as on the right side of an assignment, its value is expanded as an expression until it results in a number (unset variables evaluate to 0). So, foo++ is essentially equivalent to ofoo=foo, foo=ofoo+1, ofoo When foo's value is needed, it is evaluated. When foo needs to be assigned a value, it is assigned a value. You're arguing for non-determinism when assigning a value based on whether or not a variable happens to contain a string. Unless you specifically indicate you want something like that, like when using namerefs, it's not reasonable. > 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. It's not indirection, and I am not sure why you show the completely different variable indirection syntax. The mental model you're using may equate the two, but they are not the same. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://cnswww.cns.cwru.edu/~chet/