Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: strange glob expansion
- X-seq: zsh-users 2560
- From: Peter Stephenson <pws@xxxxxx>
- To: zsh-users@xxxxxxxxxxxxxx
- Subject: Re: strange glob expansion
- Date: Fri, 03 Sep 1999 10:55:26 +0200
- In-reply-to: ""Bart Schaefer""'s message of "Fri, 03 Sep 1999 04:34:51 -0000." <990903043451.ZM25090@xxxxxxxxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-users-help@xxxxxxxxxxxxxx; run by ezmlm
"Bart Schaefer" wrote:
> Peter's latest patches to 3.1.6 (zsh-workers 7611 and 7624) cause zsh to
> complain:
>
> zagzig<8> echo L(*/)#
> zsh: bad pattern: L(*/)#
>
> Zsh is being very clever here, as it's only a bad pattern in file-globbing
> context, not in string matching context:
>
> zagzig<9> [[ Lazy//lob/ == L(*/)# ]] && echo ok
> ok
It occurs to me (finally) that maybe this is the best behaviour, since it
actually lets you know that /'s don't work in parentheses for files. The
documented behaviour (works up to 3.1.6) is that the / is ignored and
parsing continues after the parentheses, but I guess that was simply to
note what was actually happening rather than an endorsement of it (and the
example with the z shows it was rather flakey). I have no plans to make
/'s work in groups --- that would require large changes to both the pattern
code and the file scanning code in glob.c --- so if there is no objection
I'll just change the documentation for the new pattern matching code to
recognise the behaviour noted by Bart.
> } The upshot of this is that to match all Perl modules starting with `L'
> } below the cwd, I have to use L{*/**/*,}.pm instead of L**/*.pm.
>
> What? L{*/**/*,}.pm is first brace-expanded to L*/**/*.pm and L.pm, and
> then globbed. There probably isn't an L.pm, so that matches in any sub-
> directory whose name starts with L and all its subdirectories, all the
> files whose names end with .pm. You could have done that without the
> braces, with L*/**/*.pm, but I suspect what you meant was */**/L*.pm.
I think the answer is **/L*.pm --- as remarked by someone a day or two ago,
**/ can match (very usefully, but slightly counterintuitively given the /)
in the current directory too. For example, in /usr/local/lib/perl5
`ls **/A*.pm' gives me:
AnyDBM_File.pm AutoLoader.pm AutoSplit.pm Text/Abbrev.pm
--
Peter Stephenson <pws@xxxxxx> Tel: +39 050 844536
WWW: http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy
Messages sorted by:
Reverse Date,
Date,
Thread,
Author