set sets args, and exits null no bug there On Wed, Apr 7, 2021, 16:40 konsolebox <konsole...@gmail.com> wrote:
> On Wed, Apr 7, 2021 at 9:25 PM Chet Ramey <chet.ra...@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 > >