zsh-users
 help / color / mirror / code / Atom feed
From: Peter Stephenson <p.stephenson@samsung.com>
To: Enrico Maria Crisostomo <enrico.m.crisostomo@gmail.com>,
	zsh-users@zsh.org
Subject: Re: ZSH expansion of an evaluated parameter containing a pipe character (and differences between 4.x and 5.x)
Date: Thu, 09 Oct 2014 11:49:18 +0100	[thread overview]
Message-ID: <20141009114918.66f4af6a@pwslap01u.europe.root.pri> (raw)
In-Reply-To: <etPan.54363c1a.5c7cdda7.f7ec@MacBook0.local>

On Thu, 09 Oct 2014 09:41:14 +0200
Enrico Maria Crisostomo <enrico.m.crisostomo@gmail.com> wrote:
> I’m trying to understand the rationale between a behavioural
> difference between ZSH 4.3.17 (current in latest Debian stable) and
> ZSH 5.0.2 (current in latest OS X).  I’m digging into the 'ZSH Shell
> Manual’ but I haven’t found the (exact) answer to my question yet.
> 
> The issue is the following.  What I’m doing is storing into a variable
> a command that will be executed later, the reason being the command
> depend on information only available at runtime.  I’ve detected a
> difference in behaviour between ZSH 4 and ZSH 5 when the
> aforementioned command contains a pipe.  For the sake of argument,
> let’s imagine the command is stored into `EXAMPLE_CMD` and is as
> simple as:
> 
>     EXAMPLE_CMD=“ls -al | grep text”
> 
> If I eval this variable using ZSH 5, the result is the expected:
> 
>     $ eval ${EXAMPLE_CMD}
> 
> that is:
> 
>   * `ls` is executed and passed `-al` as a parameter.
>   * Its output is piped through `grep`, that is passed `text` as a parameter.
> 
> When I do the same thing in ZSH 4, the behaviour is different and leads to this failure:
> 
>     # eval ${EXAMPLE_CMD}
>     zsh: no matches found: ls -al | grep text

I suspect you've got the GLOB_SUBST option set in the second case but
not the first --- if I set that in either version of the shell
(4.3.10-dev-1 is the oldest I had lying around) I get that error.
If I unset it I don't.

That's because in zsh "|" is a pattern match character as well as a
syntactical character.  In a normal command line you'd surround it with
parentheses to use it for pattern matching.  However, when it's being
substituted into the command line, so the line isn't being parsed, and
GLOB_SUBST is set, it's treated as a pattern character immediately.

GLOB_SUBST is usually used for compatibility with other shells with
different pattern matching behaviour.  If you set the option SH_GLOB as
well, which restricts pattern matching to standard sh-style patterns,
you should find the error goes away --- it does here in both versions of
the shell.

Basically, I think you need to decide if you want native zsh operation
--- both options off --- or sh-like operation --- both options on.
Arguably there are too many combinations, for historical reasons.

pws


  reply	other threads:[~2014-10-09 10:49 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-09  7:41 Enrico Maria Crisostomo
2014-10-09 10:49 ` Peter Stephenson [this message]
2014-10-09 12:27   ` Enrico Maria Crisostomo

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=20141009114918.66f4af6a@pwslap01u.europe.root.pri \
    --to=p.stephenson@samsung.com \
    --cc=enrico.m.crisostomo@gmail.com \
    --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).