[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Empty array referenced by indirection reports unbound variable
From: |
konsolebox |
Subject: |
Re: Empty array referenced by indirection reports unbound variable |
Date: |
Wed, 7 Apr 2021 22:39:08 +0800 |
On Wed, Apr 7, 2021 at 9:25 PM Chet Ramey <chet.ramey@case.edu> wrote:
>
> On 4/5/21 4:45 PM, konsolebox wrote:
> > set -u
> > array=()
> > __ref=array[@]
> > : "${array[@]}" # Reports nothing
>
> This is a special case, mirroring the special case that POSIX carved out
> for $@ and $* in 2009.
>
> > : "${!__ref}" # Unbound variable
>
> But this is not. Bash looks for __ref, finds it with a value of array[@],
> and attempts to expand that. It expands to null (internally), since there
> are no array elements, which becomes the value of the parameter expansion.
>
> Since the expansion (${!__ref}) resulted in the null string, `set -u' kicks
> in and bash reports a fatal error.
But that doesn't seem consistent since `set -- "${!__ref}"; echo "$#"`
shows 0, meaning it didn't expand to a null string but practically
nothing. Does that mean internally ${!__ref} expands to null string
but checks for a flag if it's an array expansion before the actual
resulting expansion? If that's the case shouldn't it be the same when
reporting unbound variable?
--
konsolebox
Re: Empty array referenced by indirection reports unbound variable, Chet Ramey, 2021/04/07
- Re: Empty array referenced by indirection reports unbound variable,
konsolebox <=