Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: priority problem of ":|" and ":*"
On Wed, Dec 26, 2012 at 01:10:19AM -0800, Bart Schaefer wrote:
> Hmm.
>
> % a1=(a b c); print "${#a1}" :"${a1}":
> 3 :a b c:
>
> Plainly if length were applied after double-quoted joining, the above
> should print 5 rather than 3. As I'm pretty sure this hasn't changed
> *ever*, it must be that the documentation is wrong, not that :| has the
> wrong priority.
>
> And in fact poring through the code it appears that rule 5 double-quoted
> joining is explicitly SKIPPED when the length is requested:
>
> if (isarr) {
> if (nojoin)
> isarr = -1;
> if (qt && !getlen && isarr > 0) {
> val = sepjoin(aval, sep, 1);
> isarr = 0;
> }
> }
>
> "qt" there means double-quoted, but "getlen" means the "#" was seen. So
> when evaluating length, we do not remove arrayness.
>
But I think ":|" doesn't skip the double-quoted, so the "#" would get the
length of the result of ":|", because "#"'s priority is lower than
":|"'s. Or when running in double-quoted, "#" will has a higher priority
?
% a1=(a b c);a2=('a b c');print ${#a1:|a2}
3
% a1=(a b c);a2=('a b c');print "${a1:|a2}"
% a1=(a b c);a2=('a b c');print "${#a1:|a2}"
3
Looks like #'s priority will be higher than :| in the double-quoted.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author