Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
ZSH expansion of an evaluated parameter containing a pipe character (and differences between 4.x and 5.x)
- X-seq: zsh-users 19225
- From: Enrico Maria Crisostomo <enrico.m.crisostomo@xxxxxxxxx>
- To: zsh-users@xxxxxxx
- Subject: ZSH expansion of an evaluated parameter containing a pipe character (and differences between 4.x and 5.x)
- Date: Thu, 9 Oct 2014 09:41:14 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:message-id:subject:mime-version:content-type :content-transfer-encoding:content-disposition; bh=enDjdNf+nB0RLxwA05fr6itx/fHHK1PUUQMDS6Krm90=; b=xLqvTx/is7wO3f6UNYOAatGqxJiv0LflIahoiX+Zt5aWpUBD/BI2cmtu5bJ/iB6EdU 4nWqlEd1Jec/F84yn1P9GnFmK/9Ra3QB7uiUpcP/N92w446JpdV05PVPWDywb2Vm+38i WsFZv0dMBwp3Se3Mo2o0gaMQ2LFSbahnIUHWyOppF9ytbvIcg2WbD5uDg9ui8SabWoHh GCW0vxXe5DjyUTYoDCibkYjR4GaP8Gdt6VkVav3vqrkSBC2AewOzhmrUsmWr6JPnitB3 VOjVR+FcvjeofSduRaQlL5gLuscJmHMUfo1laZEEzwEdsg+/8YE8NP90wAdYpdGYimxP iO5w==
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
Hi all,
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
However, if I quote `EXAMPLE_CMD` in either version of the shell, the result is the same:
# eval “${EXAMPLE_CMD}”
drwxr-xr-x 2 root root 4096 Oct 6 21:02 text
According to my observations, it seems this issue is limited to the interpretation of the pipe in the command, since I’ve found no other differences between the behaviours of the two shell versions in this case.
To me, it came quite as a surprise to discover that quoting worked, since I assumed that eval would receive 1 argument (the whole quoted string) and that its behaviour wouldn’t change. Which leads me to think that either ZSH 4 is performing an expansion I’m not aware of affecting (at least) the meaning of `|`, or that this behaviour is buggy.
Now, the first question that I’m trying to answer is “Why expansion is done like that?”. The second one that comes to mind is: what’s the rationale behind this change? Is the behaviour of ZSH 4 considered buggy?
More generally: could you share your thoughts about the “proper”/“best”/“put your favourite adjective here" way to handle this case in ZSH?
Thank you very much for your insights.
Cheers,
--
Enrico Maria Crisostomo
Messages sorted by:
Reverse Date,
Date,
Thread,
Author