* Re: Questions from zshexpn(1) -- Globbing
2019-11-19 0:53 ` Questions from zshexpn(1) -- Globbing Perry Smith
@ 2019-11-19 9:35 ` Peter Stephenson
0 siblings, 0 replies; 2+ messages in thread
From: Peter Stephenson @ 2019-11-19 9:35 UTC (permalink / raw)
To: zsh-users
On Mon, 2019-11-18 at 18:53 -0600, Perry Smith wrote:
> The subsection is Globbing Flags within Filename Generation with both
> the b and m flags is a curious phrase:
>
>> Activate backreferences for parenthesised groups in the pattern;
>> this does not work in filename generation.
> Why does it say “this does not work in filename generation” ? Using
> their example for the m flag:
>
>> arr=(veldt jynx grimps waqf zho buck)
>> print ${arr//(#m)[aeiou]/${(U)MATCH}}
> I can change the “print” to “touch” and it touches the files and
> change it to “rm” and it removes the files.
>
> My fear here is that I’m missing something rather significant such as
> what precisely is “filename generation”
You're using that feature in variable substitution, not filename
generation.
Filename generation is specifically the use of pattern characters *, ?,
etc. to generate file names. So what this means is that the patterns
generated by that method aren't available for use in what I called
backreferences (that's a bad name, sorry: when used in regular
expressions, its standard meaning is references back to a previous part
of the same pattern, which isn't what's happening here).
So if instead of using the array you matched the files directly,
having created them:
touch $arr
print (#m)*([aeiou])*
you'd have no way of using the references generated because the file
names are substituted before the $MATCH variable would be available ---
which is probably obvious.
Of course, even if you needed to match the files on the disk first you
could still do
arr=(*)
print ${arr//(#m)[aeiou]/${(U)MATCH}}
so you've still got the ability to change the file names with variable
substitution.
So this is probably saying less than you think it is.
pws
^ permalink raw reply [flat|nested] 2+ messages in thread