[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Empty array referenced by indirection reports unbound variable
From: |
Alex fxmbsw7 Ratchev |
Subject: |
Re: Empty array referenced by indirection reports unbound variable |
Date: |
Wed, 7 Apr 2021 16:43:54 +0200 |
set sets args, and exits null
no bug there
On Wed, Apr 7, 2021, 16:40 konsolebox <konsolebox@gmail.com> wrote:
> 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, (continued)
Re: Empty array referenced by indirection reports unbound variable, Chet Ramey, 2021/04/07