From: "Bart Schaefer" <schaefer@candle.brasslantern.com>
To: Andrej Borsenkow <Andrej.Borsenkow@mow.siemens.ru>,
<zsh-workers@sunsite.dk>
Subject: Re: Patterns quoting in subscript (was: Re: PATCH: Assorted parameter stuff)
Date: Wed, 18 Apr 2001 07:38:53 +0000 [thread overview]
Message-ID: <1010418073853.ZM28977@candle.brasslantern.com> (raw)
In-Reply-To: <Pine.SV4.4.33.0104172214250.9148-100000@itsrm2.mow.siemens.ru>
On Apr 17, 10:30pm, Andrej Borsenkow wrote:
}
} At least one thing has changed (but I consider behaviour broken in
} anyway):
}
} bor@itsrm2:~%> foo=(a '?' '\?')
} bor@itsrm2:~%> print -r $foo[(r)?]
} a
} bor@itsrm2:~%> print -r $foo[(r)\?]
} ?
} bor@itsrm2:~%> print -r $foo[(r)\\?]
} ?
} bor@itsrm2:~%> print -r $foo[(r)\\\?]
} ?
You just didn't try enough backslashes yet:
schaefer[507] print -r $foo[(r)\\\\\?]
\?
The reason you need five is that [...] is parsed as if double quoted,
except that \] is magic instead of \". Then the pattern inside it is
tokenized by (r) before being passed to patcompile(). So it goes like:
parse tokenize pattern
\\ \\ \? --> \\ \? --> \?
(In double quotes, \\ --> \ but \? --> \?.)
} Both are broken. Without patch you have at least some (albeit completely
} unclear) possibility to quote patterns in subscript - with patch even this
} one is gone.
Not true. Without the patch you can't explain the rationale for quoting,
but with the patch it's predictable. Similarly, without the patch this
fails utterly:
schaefer[508] x='\?'
schaefer[509] print -r $foo[(r)${(q)x}]
\?
But with the patch it's possible to explain why it works:
parse tokenize pattern
${(q)x} --> \\ \? --> \?
} Suggestion is something like
}
} $foo[()pattern] - is parsed just like a "normal" globbing pattern, taking
} in account any quoting. I.e. in $foo[(r)\*$bar] neither ``*'' nor contents
} of $bar is taken as pattern.
Unfortunately, this is a significant change in zsh semantics. I don't
think we have the opportunity to do this any longer. It may be too bad
that this wasn't originally the spec, but I think we're stuck with the
current interpretation of [(r)$bar].
} Special consideration is needed for double quotes. Because normally
} "$foo[(r)\?]" is parsed as *two* characters - ``\'' and ``?'', to allow
} quoting inside double-quotes extension of quoting rules is needed. I.e.
} ``\'' should be allowed to quote pattern metacharacters inside of
} subscript.
You'll note that with my patch the quoting inside and outside of double
quotes works exactly the same (except of course for the double-quote
character itself). That is,
schaefer[513] print -r "$foo[(r)\\\\\?]"
\?
Five backslashes, just as before; same result.
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net
next prev parent reply other threads:[~2001-04-18 8:15 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-04-15 8:06 PATCH: Assorted parameter stuff Bart Schaefer
2001-04-17 3:54 ` Example from manual seems broken F. G. Marx
2001-04-17 4:45 ` Bart Schaefer
2001-04-18 6:57 ` PATCH: Assorted parameter stuff Bart Schaefer
2001-04-18 8:44 ` Sven Wischnowsky
2001-04-19 3:57 ` Bart Schaefer
2001-04-19 7:05 ` Sven Wischnowsky
2001-04-19 8:53 ` fpath problem on clean install Andrej Borsenkow
2001-04-19 9:50 ` PATCH: " Sven Wischnowsky
2001-04-19 14:02 ` Andrej Borsenkow
2001-04-19 9:20 ` PATCH: Assorted parameter stuff Andrej Borsenkow
2001-04-19 9:47 ` Bart Schaefer
2001-04-19 9:34 ` Bart Schaefer
2001-04-20 5:20 ` Bart Schaefer
2001-04-17 18:30 ` Patterns quoting in subscript (was: Re: PATCH: Assorted parameter stuff) Andrej Borsenkow
2001-04-18 7:38 ` Bart Schaefer [this message]
2001-04-18 8:10 ` Bart Schaefer
2001-04-18 8:34 ` Andrej Borsenkow
2001-04-18 8:45 ` Andrej Borsenkow
2001-04-18 17:26 ` Bart Schaefer
2001-04-18 20:14 ` Bart Schaefer
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=1010418073853.ZM28977@candle.brasslantern.com \
--to=schaefer@candle.brasslantern.com \
--cc=Andrej.Borsenkow@mow.siemens.ru \
--cc=zsh-workers@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).