zsh-users
 help / color / mirror / code / Atom feed
From: DervishD <zsh@dervishd.net>
To: Bart Schaefer <schaefer@brasslantern.com>
Cc: Zsh Users <zsh-users@sunsite.dk>
Subject: Re: Printing arrays for use with $()
Date: Fri, 12 Aug 2005 10:29:09 +0200	[thread overview]
Message-ID: <20050812082909.GB354@DervishD> (raw)
In-Reply-To: <1050812022700.ZM12607@candle.brasslantern.com>

    Hi Bart :)

 * Bart Schaefer <schaefer@brasslantern.com> dixit:
> On Aug 11,  7:01pm, DervishD wrote:
> }     So, if I must pass a list of filenames from one app to another in
> } the most generic way, which are my options?
> It all comes back to having some degree of control over the calling
> environment.  For example, if it were sufficient that
> 
> 	du -s *.whatever
> and
> 	eval du -s `myscript`
> 
> were equivalent, then
> 
> 	print -r -- ${(q)array}
> 
> should be enough.

    Which is not. I mean, it is if I use the eval solution (which, as
I told Wayne, I had tested before without success, probably a typo.
Oh, no, examining my history, the problem was the missing 'q' flag,
that's all).

> }     I've been trying this (without success):
> }     command $(printf '"%s "' $array) 
> Even if that would work (which, as you've seen, it does not) why would
> you want to include a trailing space *inside* the double quotes?

    A typo, my fault O:)
 
> }     The worst thing is that I had the intention of using a couple
> } more scripts in this way, generating a list of files to work on and
> } dumping it to stdout :( but without being able to solve this
> } problem...
> 
> Well, you could always change tack entirely and instead of
> 
> 	du -s `myscript`
> 
> you could call
> 
> 	myscript du -s
> 
> That is, have your script work the way zargs does.

    This is a bit difficult because it forces me to change the way
that the command line is parsed. I mean, the script gets a globbing
pattern or a list of files to process (and produces another list),
and if one of the parameters is a command, I must think about a way
of separating it from the list of files. Something like:

    myscript -c "du -s" files...

    Not much difficult (the script already uses 'getopts') but a bit
messy if I must pass parameters with spaces in them in the command.
It's much easier to use eval, then. Obviously I can use zargs as a
model (using "-- command args"). I think that it could be the way...

> 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'.

    Do you mean something like this?:

    IFS=$'\0' du -s `myscript`

    Because it doesn't work, neither (nor exporting IFS with NULL as
its value, zsh still splits on spaces).

    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`)

    and making 'myscript' to do a simple 'print -l'. Obviously, the
problem is more or less the same, I need 'eval' or something like
that. 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`)
    print -l ${(s:$'\0':)array}

    I can use 'eval', of course:

    eval array=\(`print -r -- ${(q)list}`\)

    But it is even more messy to write than using the command itself,
so...  Obviously I'm missing a lot of things here :( but this is the
perfect solution (using an array, I mean) because that allows me to
review the generated list and using it afterwards for more than one
command (which I do frequently, so it will be better than just do
something like "eval command `myscript`"). Any way of doing this
without much mess?

    Thanks a lot for all the help and teaching you're providing :)

    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...


  reply	other threads:[~2005-08-12  8:26 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-08-11 16:16 DervishD
2005-08-11 16:37 ` Bart Schaefer
2005-08-11 17:01   ` DervishD
2005-08-11 22:28   ` DervishD
2005-08-12  2:07     ` Wayne Davison
2005-08-12  7:45       ` DervishD
2005-08-12  2:27     ` Bart Schaefer
2005-08-12  8:29       ` DervishD [this message]
2005-08-12 14:37         ` Bart Schaefer
2005-08-12 14:52           ` DervishD
2005-08-12 14:32       ` DervishD
2005-08-12 14:57         ` DervishD
2005-08-13  1:34           ` Bart Schaefer
2005-08-13  8:28             ` DervishD
2005-08-13 18:54               ` Bart Schaefer
2005-08-13 21:52                 ` DervishD
2005-08-11 19:40 ` Dan Nelson
2005-08-11 20:09   ` DervishD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050812082909.GB354@DervishD \
    --to=zsh@dervishd.net \
    --cc=schaefer@brasslantern.com \
    --cc=zsh-users@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).