Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: bufferwords() lexes a subshell in a shortloop repeat as a string
- X-seq: zsh-workers 37685
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
- Subject: Re: bufferwords() lexes a subshell in a shortloop repeat as a string
- Date: Mon, 18 Jan 2016 20:56:04 -0800
- Cc: Peter Stephenson <p.stephenson@xxxxxxxxxxx>, Zsh hackers list <zsh-workers@xxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=evmudEOoyaUiovWKRvHEqpQcOiCjvIpz6UKw2byy4BY=; b=s9xZ8O9I5YhholgQAYDNHUIiK5B2Xlhku0f4152FBr6rSYn+VTGS2BsZlP3ldDXpl8 CAQwz3bxBwMiqaUWheya3MdBWDVIKGd6SRD8dEGDANjiNHJNGhD807Vc3bhQdKmUOcSK hhVqw9SiEjk6phHZWv20Qs7CxRX2teA9LpZcDSEPeX2QKEgzr1ojROEY5F/NSeE0V5U/ UX/lWZ3ATYPNOFh8BYpLadggeMlD2x8yTEcKXe6/VG44N2536cyo5eBq+U5j0ucDXr9u Vk7Uav6/a2hitOc4TS4pv4yJExV9DqQkqKkFsnnorU9tKVQEbyVru/kRHOAI83bQhMeL lTnA==
- In-reply-to: <20160118022558.GC3979@tarsus.local2>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <20160115062648.GA14019@tarsus.local2> <20160115094117.5fcde75c@pwslap01u.europe.root.pri> <20160118022558.GC3979@tarsus.local2>
[Returning to the original topic of this thread ...]
On Sun, Jan 17, 2016 at 6:25 PM, Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx> wrote:
> What confuses me is that 'repeat 3 (x)' and 'repeat 3; do (x); done' are
> split differently. ;-)
>
> Shouldn't both of them treat the "(x)" the same way [either both of
> them considering it one unit, or both of them considering it three units]?
As Peter said earlier, the (z) flag does nothing but break the string
into syntactic shell words. With the exception of "for" loops, which
are a weird special case because of "for ((...))", It does NOT
interpret shell keywords to parse any corresponding loop structures.
It knows a little about assignments and redirections but otherwise
reads lexical tokens in their most generic possible context; you can
think of it as having "lex" without "yacc" to drive it.
(z) also does not expand aliases, which means that even if it did
interpret keywords you could trivially break it by aliasing something
else to expand as "repeat" or vice-versa. (In fact you can already
break the magic "for" parsing the same way.)
Messages sorted by:
Reverse Date,
Date,
Thread,
Author