Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Printing arrays for use with $()
- X-seq: zsh-users 9304
- From: DervishD <zsh@xxxxxxxxxxxx>
- To: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- Subject: Re: Printing arrays for use with $()
- Date: Fri, 12 Aug 2005 16:32:40 +0200
- Cc: Zsh Users <zsh-users@xxxxxxxxxx>
- In-reply-to: <1050812022700.ZM12607@xxxxxxxxxxxxxxxxxxxxxxx>
- Mail-followup-to: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>, Zsh Users <zsh-users@xxxxxxxxxx>
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
- Organization: DervishD
- References: <20050811161654.GA8200@DervishD> <1050811163714.ZM2498@xxxxxxxxxxxxxxxxxxxxxxx> <20050811170124.GA8279@DervishD> <20050811222847.GA341@DervishD> <1050812022700.ZM12607@xxxxxxxxxxxxxxxxxxxxxxx>
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