Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Patterns quoting in subscript (was: Re: PATCH: Assorted parameter stuff)



On Sun, 15 Apr 2001, Bart Schaefer wrote:

> The main point of this patch is to address Andrej's message from last August
> ("SourceForge bug id 104052 - case study") and related issues with parsing
> array subscripts.  Some other stuff got tweaked in passing.
>
> I'll hold off committing this until a couple of you have applied it and say
> it seems OK.  The "make check" tests all pass for me, at least (and it was
> the completion tests, rather than the parameter tests, that gave it the best
> workout).
>

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)\\\?]
?

without  patch you get:

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)\\\?]
\?
bor@itsrm2:~%> print -r $foo[(r)\\\\?]
\?
bor@itsrm2:~%> print -r $foo[(r)\\\\\?]
\?
etc etc

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.

I think, we have to decide on how quoting is actually done and finally
implement it. I have very strong inclination to not reinvent te whell and
simply use current quoting rules *including* $~foo (that as response to
another message). We still need special treatment for patterns inside
double quotes (else no subscripting is possible) - with this patch parsing
of subscription is already done in seperate function so it should be
possible.

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.

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. I am not sure what impact it possibly have on compatibility ...
OTOH if foo is array, zsh will always parse "$foo[*]" differently from
/bin/sh even in compatibility mode.


-andrej



Messages sorted by: Reverse Date, Date, Thread, Author