Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: PATCH: zsh-3.1.5-pws-7: "$a[@]" with $a unset



On Feb 12, 10:28am, Peter Stephenson wrote:
} Subject: PATCH: zsh-3.1.5-pws-7: "$a[@]" with $a unset
}
} Sven Wischnowsky wrote:
} >   % foo() { echo $# }
} >   % unset a
} >   % foo $a[@]
} >   0                    # fine
} >   % foo "$a[@]"
} >   1                    # oops

That's not an "oops".  That's the way it's supposed to work.  Try the
equivalent code in bash.

[schaefer@zagzig zsh-3.1.5-work]$ unset f
[schaefer@zagzig zsh-3.1.5-work]$ foo() { echo $#; echo "$@"; }
[schaefer@zagzig zsh-3.1.5-work]$ foo "$f[@]"
1
[@]

c[1] ksh
$ unset f
$ foo() { echo $#; echo "$@"; }  
$ foo "$f[@]"
1
[@]

(I had to ssh to my old grad school account to get that ksh example.)

zagzig[32] ARGV0=ksh zsh
zagzig% unset f
zagzig% foo() { echo $#; echo "$@"; }
zagzig% foo "$f[@]"
1
[@]

} Note that putting `a=()' before would have been a workaround.

That's The Right Thing To Do, not a workaround.

} Quoted variables only expand to nothing if the @ is present.

On a scalar -- which is what `a' is if you've never done `a=()' -- the
string $a[@] expands to all the characters in the value of $a; it's the
same as just "$a".  The quoted-@ magic doesn't apply when slicing a
scalar.

I don't think we want this patch.

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com



Messages sorted by: Reverse Date, Date, Thread, Author