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 [email protected] http://cnswww.cns.cwru.edu/~chet/