Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Patterns in parameter substitution and quoting weirdness
- X-seq: zsh-workers 12662
- From: "Andrej Borsenkow" <Andrej.Borsenkow@xxxxxxxxxxxxxx>
- To: "ZSH workers mailing list" <zsh-workers@xxxxxxxxxxxxxx>
- Subject: Patterns in parameter substitution and quoting weirdness
- Date: Wed, 16 Aug 2000 16:10:35 +0400
- Importance: Normal
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
It does not look like they behave very consistently in respect to quoting.
Consider:
bor@itsrm2% typeset -A foo
bor@itsrm2% foo[ab]=ab_val
bor@itsrm2% foo[a\?]=a\?_val
bor@itsrm2% print ${(v)foo[(I)a?]}
ab_val <= where is `a?_val' ?? That looks like a plain bug
bor@itsrm2% print "${(v)foo[(I)a?]}"
ab_val <= so, `?' is not quoted by "..." ... but
bor@itsrm2% print ${(v)foo[(I)a\?]}
<= ... it is quoted by \ or '...'
bor@itsrm2% print "${(v)foo[(I)a\?]}"
<= I'd like very much to know, what's going on behind ...
bor@itsrm2% print "${(v)foo[(I)a\\?]}"
<= I'd expect THIS to work - after all, zsh finally see '\?'
bor@itsrm2% print "${(v)foo[(I)a\\\?]}"
a?_val <= and here zsh actually gets '\\?' !
It looks, like string floats around with (de-)quoting applied here and there.
bor@itsrm2% bar='a?b'
bor@itsrm2% print ${bar/a?/ZZ}
ZZb <= that's O.K.
bor@itsrm2% print ${bar/a\?/ZZ}
ZZb <= sorry? While I can understand it, why it differs from the subscript?
bor@itsrm2% print "${bar/a?/ZZ}"
ZZb <= if the above is correct, this is correct as well
bor@itsrm2% print "${bar/a\?/ZZ}"
ZZb <= that is at least strange; see next; and again, why it differs from
subscript?
bor@itsrm2% print "${bar/a\\?/ZZ}"
a?b <= WHAT!? zsh gets exatly the same string as above! (well, well, not
exactly ... but from the user's point of view it is very hard to explain).
As I see it, there are two possibilities:
- consistently apply Zsh quoting rules. That will make literal patterns inside
of double quotes impossible and force usage of temporary parameters.
- use own quoting. The only possibility looks like backslash. But then mention
it in manual at least! :-) And, in this case, it should not matter, if you use
$foo or $~foo for pattern - the result must be the same in both cases.
-andrej
Have a nice DOS!
B >>
Messages sorted by:
Reverse Date,
Date,
Thread,
Author