[-- Attachment #1: Type: text/plain, Size: 362 bytes --] Hi, The following two statements produce the expected results: % A=(${:-.z*(.N)}) % A=(${A:#*(comp|hist)*}) When trying to nest the two, the result is the glob statement: A=(${${:-.z*(.N)}:#*(comp|hist)*}) Trying to understand why this is the case. Could someone explain why this happens? Is there a way to nest the two? Thanks for your help, Jim Murphy [-- Attachment #2: Type: text/html, Size: 588 bytes --]
On 4/21/22, Jim <linux.tech.guy@gmail.com> wrote:
> Hi,
>
> The following two statements produce the expected results:
>
> % A=(${:-.z*(.N)})
> % A=(${A:#*(comp|hist)*})
>
> When trying to nest the two, the result is the glob statement:
>
> A=(${${:-.z*(.N)}:#*(comp|hist)*})
>
> Trying to understand why this is the case. Could someone explain why this
> happens?
> Is there a way to nest the two?
There is a certain order that parameter expansions and globs happen
relative to eachother, nesting param expansions does not change the
order of processing. Eg, there is not really any way you can process
.z* before the outer :# happens, which will operate on the
pre-expanded string in your final combined statement. In short, no(t
as far as I know).
--
Mikael Magnusson
On Thu, Apr 21, 2022 at 11:51 AM Mikael Magnusson <mikachu@gmail.com> wrote:
>
> On 4/21/22, Jim <linux.tech.guy@gmail.com> wrote:
> >
> > % A=(${:-.z*(.N)})
> > % A=(${A:#*(comp|hist)*})
> >
> > Is there a way to nest the two?
>
> There is a certain order that parameter expansions and globs happen
> relative to eachother [...] In short, no(t as far as I know).
Correct, this can't be done as a nested expansion, except by invoking
a subshell to perform the globbing.
A=(${${(@f):-$(print -rl .z*(.N))}:#*(comp|hist)*})
However, with extendedglob this specific example can be done entirely
with globbing:
A=( .z*~*(comp|hist)*(.N) )
[-- Attachment #1: Type: text/plain, Size: 1082 bytes --] Thanks everyone for the responses. On Thu, Apr 21, 2022 at 2:15 PM Bart Schaefer <schaefer@brasslantern.com> wrote: > On Thu, Apr 21, 2022 at 11:51 AM Mikael Magnusson <mikachu@gmail.com> > wrote: > > > > On 4/21/22, Jim <linux.tech.guy@gmail.com> wrote: > > > > > > % A=(${:-.z*(.N)}) > > > % A=(${A:#*(comp|hist)*}) > > > > > > Is there a way to nest the two? > > > > There is a certain order that parameter expansions and globs happen > > relative to eachother [...] In short, no(t as far as I know). > > Correct, this can't be done as a nested expansion, except by invoking > a subshell to perform the globbing. > > A=(${${(@f):-$(print -rl .z*(.N))}:#*(comp|hist)*}) > Came fairly close on this one while trying different ways. Didn't use a print command. :-( However, with extendedglob this specific example can be done entirely > with globbing: > > A=( .z*~*(comp|hist)*(.N) ) > Is there a typo or something missing here? This didn't find any files when I cut and pasted it in a shell. ZSH_VERSION 5.8 ZSH_PATCHLEVEL debian/5.8-6+deb11u1 Again, thanks, Jim Murphy [-- Attachment #2: Type: text/html, Size: 1935 bytes --]
[-- Attachment #1: Type: text/plain, Size: 1265 bytes --] Sorry, thought I had extendedglob set, works fine. On Thu, Apr 21, 2022 at 3:37 PM Jim <linux.tech.guy@gmail.com> wrote: > Thanks everyone for the responses. > > On Thu, Apr 21, 2022 at 2:15 PM Bart Schaefer <schaefer@brasslantern.com> > wrote: > >> On Thu, Apr 21, 2022 at 11:51 AM Mikael Magnusson <mikachu@gmail.com> >> wrote: >> > >> > On 4/21/22, Jim <linux.tech.guy@gmail.com> wrote: >> > > >> > > % A=(${:-.z*(.N)}) >> > > % A=(${A:#*(comp|hist)*}) >> > > >> > > Is there a way to nest the two? >> > >> > There is a certain order that parameter expansions and globs happen >> > relative to eachother [...] In short, no(t as far as I know). >> >> Correct, this can't be done as a nested expansion, except by invoking >> a subshell to perform the globbing. >> >> A=(${${(@f):-$(print -rl .z*(.N))}:#*(comp|hist)*}) >> > > Came fairly close on this one while trying different ways. Didn't use a > print > command. :-( > > However, with extendedglob this specific example can be done entirely >> with globbing: >> >> A=( .z*~*(comp|hist)*(.N) ) >> > > Is there a typo or something missing here? This didn't find any files when > I > cut and pasted it in a shell. > > ZSH_VERSION 5.8 > ZSH_PATCHLEVEL debian/5.8-6+deb11u1 > > Again, thanks, > > Jim Murphy > [-- Attachment #2: Type: text/html, Size: 2362 bytes --]