makefile上的扩展glob表达式

makefile上的扩展glob表达式,makefile,zsh,gnu-make,glob,Makefile,Zsh,Gnu Make,Glob,考虑以下命令在zsh中创建的文件结构 mkdir fff fff/a fff/b touch fff/{a,a/a,b/a,}.{x,y,z} 我想对“fff”的所有子目录中没有“z”扩展名的所有文件进行全局搜索。所以 ls fff/**/^*.z(.) 假设设置了extended\u glob选项,则在交互式shell中执行此操作。但是,当我在这样的makefile中使用上面的cl时 SHELL=/bin/zsh list_not_z : ls fff/**/^*.z(.) 它不

考虑以下命令在zsh中创建的文件结构

mkdir fff fff/a fff/b
touch fff/{a,a/a,b/a,}.{x,y,z}
我想对“fff”的所有子目录中没有“z”扩展名的所有文件进行全局搜索。所以

ls fff/**/^*.z(.)
假设设置了
extended\u glob
选项,则在交互式shell中执行此操作。但是,当我在这样的makefile中使用上面的cl时

SHELL=/bin/zsh
list_not_z :
    ls fff/**/^*.z(.)
它不进行任何操作并报告错误:

ls fff/**/^*.z(.)

zsh:1:未找到匹配项:fff/**/^*.z(.)

另一方面,使用
ls fff/***.z(.)
对所有具有“z”扩展名的文件进行全局化处理,既可以在makefile中进行交互,也可以在makefile中进行交互。因此,我怀疑这与
^
属于zsh的扩展glob语法这一事实有关。my.zshrc中设置了相应的选项
extended_glob


为什么glob在交互式shell中能像预期的那样工作,但在GNU make作为makefile配方的一部分执行时却不能工作?

make
没有为它用来执行配方的非交互式shell提供
.zshrc
文件,因此没有设置
扩展的\u glob

最简单的方法是显式运行
zsh
,将
extended_glob
选项作为命令行参数传递。q

list_not_z:
        zsh -o extended_glob -c 'ls fff/**/^*.z(.)'

“假设已设置扩展_glob选项”
make
使用的是非交互式shell,
.zshrc
文件未在此处来源。