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