From: Daniel Shahaf <d.s@daniel.shahaf.name>
To: Ray Andrews <rayandrews@eastlink.ca>
Cc: zsh-users@zsh.org
Subject: Re: whence question
Date: Sat, 14 Jan 2017 20:56:41 +0000 [thread overview]
Message-ID: <20170114205641.GB6210@fujitsu.shahaf.local2> (raw)
In-Reply-To: <ac84bfaa-5034-8465-1ce9-6069946ec596@eastlink.ca>
Ray Andrews wrote on Sat, Jan 14, 2017 at 11:51:08 -0800:
> On 14/01/17 10:55 AM, Bart Schaefer wrote:
> >
> > local _args=( ${~@} )
> >
> >
> [...] I almost read that one.
What you wrote is:
|local _args=`eval echo $@`||
||_args=( ${(z)_args} )|
Your input here was the positional arguments ($@), which are a list of
words parsed from the command line.
The input to eval is an unparsed command line string. Therefore,
passing $@ to eval is a type mismatch. It will cause filenames with
spaces to be split. The way to interpolate variables into eval's
arguments is with (q), e.g., the following are equivalent:
.
echo $foo
eval echo ${(q)foo}
Next, using 'echo' will not safely round-trip arbitrary values;
filenames with spaces or backslashes would be mangled by it (even
without 'eval').
There are other problems here (splitting on spaces is the least of your
concerns with that 'eval'; it inteprets data as code), but circling back
to Bart's solution, what it does right is that it uses the correct data
types and applies the correct transformation. That's because «${~@}»
happens to be a transformation that takes a "$@", interprets every word
in it as a glob, and returns a list of words. (Without the round
parentheses, it'd return something else.) It's documented in "Parameter
expansion" in zshexpn(1); grep for GLOB_SUBST.
Note also that the round parentheses are required, to declare an array
rather than a single string.
Cheers,
Daniel
next prev parent reply other threads:[~2017-01-14 21:00 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <652bcc3f-7365-2e52-d39c-8576278606bc__74.9235078275845$1484367323$gmane$org@eastlink.ca>
2017-01-14 4:40 ` Daniel Shahaf
2017-01-14 4:57 ` Ray Andrews
2017-01-14 18:32 ` Ray Andrews
2017-01-14 18:55 ` Bart Schaefer
2017-01-14 19:51 ` Ray Andrews
2017-01-14 20:56 ` Daniel Shahaf [this message]
2017-01-14 21:26 ` Ray Andrews
2017-01-14 21:53 ` Daniel Shahaf
2017-01-15 19:53 ` Ray Andrews
2017-01-14 21:43 ` Bart Schaefer
2017-01-14 21:55 ` Bart Schaefer
2017-01-15 20:06 ` Ray Andrews
2017-01-14 4:13 Ray Andrews
2017-01-14 5:11 ` Bart Schaefer
2017-01-14 6:09 ` Ray Andrews
[not found] ` <7b890e89-d01b-ab5c-32bf-b75bfa8d945c__41234.9168131643$1484374276$gmane$org@eastlink.ca>
2017-01-14 6:48 ` Daniel Shahaf
2017-01-14 16:36 ` Ray Andrews
2017-01-14 17:11 ` Bart Schaefer
2017-01-14 19:13 ` Ray Andrews
2017-01-14 17:46 ` Jens Elkner
2017-01-14 17:59 ` Bart Schaefer
2017-01-14 18:23 ` Jens Elkner
2017-01-14 19:08 ` Nikolay Aleksandrovich Pavlov (ZyX)
2017-01-14 20:13 ` Daniel Shahaf
2017-01-14 21:04 ` Bart Schaefer
[not found] ` <4cca17742cded21984e6092622265ab9@cmgw03.eastlink.ca>
2017-01-14 21:44 ` Ray Andrews
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=20170114205641.GB6210@fujitsu.shahaf.local2 \
--to=d.s@daniel.shahaf.name \
--cc=rayandrews@eastlink.ca \
--cc=zsh-users@zsh.org \
/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).