bug-bash
[Top][All Lists]
Advanced

[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
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]