On Fri, Jul 18, 2008 at 08:52:47AM -0400, Poor Yorick wrote: > Stephane Chazelas wrote: >> >> In zsh, removing the empty elements is just a matter of >> >> var1=($var1) > > Wouldn't this corrupt the elements with spaces, just as in bash? [...]
No, zsh doesn't do word splitting (nor filename generation) on variable expansion unless you explicitely request it (or unless called in sh or ksh compatibility). In bash and ksh, $var1 expands to the list of files that match the patterns resulting from the word splitting of the element of indice 0 in the var1 array (and in scalar context to that element without globbing nor splitting obviously). In zsh, it expands to the non-empty elements of the array (and in scalar context to the concatenation of those elements with the first character of $IFS). In zsh, string and arrays are of a different type. In ksh (and bash in most situations), all variables are arrays, and $var is a shortcut for ${var[0]}. To perform word splitting in zsh, you have to use $=var ($= looks like scissors), and to perform globbing: $~var. So bash's [EMAIL PROTECTED] can be written [EMAIL PROTECTED] in zsh, but you can also make zsh behave as bash by default with some option settings (like in sh or ksh emulation). Which makes me think that a way to answer the OP's request is to do: set -f; IFS= var2=([EMAIL PROTECTED]) (which changes the indices). -- Stéphane