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

Re: Printing arrays for use with $()



    Hi Bart :)

 * Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> dixit:
> }     I'm thinking about another solution that could be better, since
> } sometimes I want to manually review the list before passing it to the
> } command (and the scripts generates a *different* list each time is
> } called):
> } 
> }     array=(`myscript args`)
> 
> A potential way to do this would be to have myscript print the entire
> assignment expression:
> 
>     print -r -- array=\( ${(q)array} \)
>
> and then have the caller simply do:
> 
>     eval $(myscript args)

    I prefer the solution you post below...
 
> } Could I do the above, using 'print -N', and after that forcing
> } the split in NULLs? I've tested this (doesn't work):
> } 
> }     array=(`print -N -- $list`)
> 
> This doesn't work because in an array context zsh is going to split on
> $IFS during the assignment itself, so you already have the wrong thing
> in $array before you even get as far as printing it.  You need to use
> a scalar assignment:
> 
>     notyetarray=`print -N -- $list`
>     array=(${(s:$'\0':)notyetarray})
> 
> Or (note the double quotes):
> 
>     array=( ${(ps:\0:)"$(print -rN -- $list)"} )

    I've posted a minute ago a possible solution, using more or less
the same mechanism, only I was using ':' as the separator and not
'\0' because it doesn't work for me. I mean, if I do the above, I
cannot use the array directly, I need:

    du -s ${(ps:\0:)array}

    Take a look at my other message about this solution, please, and
make comments to the method I'm using.

    Thanks again, Bart.

    Raúl Núñez de Arenas Coronado

-- 
Linux Registered User 88736 | http://www.dervishd.net
http://www.pleyades.net & http://www.gotesdelluna.net
It's my PC and I'll cry if I want to...



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