从采购中排除多个文件?

Tuy*_*ham 3 zsh wildcards

我有setopt extended_glob,我想排除以~/.config/zsh_文件名 或 开头的completion.zsh所有文件options.zsh

我有这个命令:

for f (${${(%):-%x}:P:h:h}/**/([^_|^completion|^options])*.zsh) print $f
Run Code Online (Sandbox Code Playgroud)

它完成了这项工作,但上面的命令也排除了lazyload.zsh,为什么上面的命令排除这个模式?我预计它会打印出来lazyload.zsh

Sté*_*las 5

只是:

\n\n
${${(%):-%x}:P:h:h}/**/(^(_|completion|options)*).zsh\n
Run Code Online (Sandbox Code Playgroud)\n\n

^extendedglob否定运算符。

\n\n

记住[anything]只匹配一个字符\xc2\xb9。

\n\n

[a|b]匹配a,|b,[^a|b]匹配除a,|或 之外的任何字符b

\n\n

因此,您的模式排除了lazyload.zsh,因为它位于单字符匹配运算符l排除的字符列表中。[^...]

\n\n
\n\n

\xc2\xb9 (在zsh; 在某些其他 shell 中,它还可能匹配某些语言环境中的多字符整理元素;zsh[...]还可以匹配不构成有效字符部分的字节,YMMV 与其他 shell)

\n