[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: namerefs and environment variable names with subscripts
From: |
Chet Ramey |
Subject: |
Re: namerefs and environment variable names with subscripts |
Date: |
Wed, 18 Jul 2018 14:51:53 -0400 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
On 7/17/18 4:44 PM, Grisha Levit wrote:
> The following commands:
>
> declare -n r=v[0]
> v=(X); r=Y
> declare -p ${!v*}
> printf "%s: <%s>\n" "r" "$r" "v" "$v"
>
> Will normally produce the following output:
>
> declare -a v=([0]="Y")
> r: <Y>
> v: <Y>
>
> However, if we start bash with `v[0]' already in the environment, such as
> with:
>
> env 'v[0]=' $BASH
>
> The behavior changes, and the output is:
>
> declare -a v=([0]="X")
> declare -x v[0]="Y"
> r: <Y>
> v: <X>
>
> I would expect namerefs to ignore any variables with the literal name
> `v[0]' in the environment rather than follow them.
Thanks. Bash needs to better segregate environment variables that aren't
valid shell identifiers.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU chet@case.edu http://tiswww.cwru.edu/~chet/