从采购中排除多个文件?

从采购中排除多个文件?

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

我有这个命令:

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

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

答案1

只是:

${${(%):-%x}:P:h:h}/**/(^(_|completion|options)*).zsh

^extendedglob否定运算符。

记住[anything]只匹配一个字符1。

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

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


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

相关内容