[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: empty nameref issue
From: |
Chet Ramey |
Subject: |
Re: empty nameref issue |
Date: |
Wed, 1 Dec 2021 09:33:08 -0500 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 |
On 11/28/21 9:13 AM, Léa Gris wrote:
>
> This is ok as here:
>
>> # declare nameref without assigned value
>> declare -n ref
>>
>> # use nameref as iterator
>> for ref in foo bar baz
>> do ref='Hello the World!'
>> done
>>
>> declare -p foo bar baz
>
> although: declare -n ref
> leaves the ref variable in a limbo state with no value
It's not a `limbo state'; it's an unset variable like any other. There's
no real difference between that and `export foo': you have an object with
an attribute, but it's unset.
>> $ unset -n ref; declare -n ref; printf %q\\n "$ref"
>> ''
>
> This strangely cause no error and returns an empty string.
Just like referencing any unset variable.
>> $ unset -n ref; declare -n ref; printf %q\\n "${!ref}"
>> bash: ref: invalid indirect expansion
>
> But trying to expand the value of the nameref itself causes this "invalid
> indirect expansion error"
In this case, you actually try to get the value. There's no value -- the
variable is unset -- so you get an error because there's nothing to
expand.
>
> This seems counter-intuitive.
> Intuitively:
> - Expanding the value of a nameref without an assigned value should return
> an empty string.
> - Expanding the value of the refered variable whose nameref is undefined
> would return some error
>
> The other related issue is that this limbo empty state of a nameref is only
> obtained with an initial `declare -n ref`.
You have created an unset variable with an attribute. If you assign a value
to it, it will behave as namerefs are intended.
> There is no way to later clear or assign an empty string to a nameref
> unless destroying and recreating the nameref with:
>
>> unset -n ref
>> declare -n ref
This doesn't make sense. The way to `clear' a variable is to unset it.
Why would you try to assign the empty string to a nameref variable? Why
use a nameref in that case?
--
``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/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: empty nameref issue,
Chet Ramey <=