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:
> That is, have your script work the way zargs does.  Or you could modify
> zargs to use ${(z)...} on its list of files, and then run
> 
> 	qzargs -- `myscript` -- du -s
> 
> But again all of this assumes you can control the caller, which means
> you could just as easily require IFS=$'\0'.  There's just no way around
> this, given the semantics of $(...) and word splitting.

    I've found a possible solution, quick and dirty but it works. The
only problem is that it's a bit messy, but probably you can 'clean'
it a bit O:) It implies an array assignment, but I have no problem
with that because the output is still human readable and using an
array allows me to review the list before using it:

    array=(`print -- ${(j.:.)list}`)
    du -s ${(s.:.)array)

    The "print" part gives us a list with items separated by ':' (I
must find a char that won't be part of the filenames, anyway. ':' is
a very good candidate, but...), and when using we have to undo the
change and do the splitting. It's a bit messy, but at least it works.
There must be a much cleaner solution, but I can't think of one now
:( It's possible to do the above without having to use the split when
using the array? I know I can do this:

    array=(${(s.:.):-`print -- ${(j.:.)list}`})

    equivalent to, in real usage, to:

    array=(${(s.:.):-`myscript args`})

    But I would like to have a simpler assignment...

    Thanks a lot in advance :)

    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