令人困惑的ZSH通配符

3
我在理解以下的全局匹配规则时遇到了困难:
${^fpath}/_git-*~(*~|*.zwc)(.N)

${^fpath} 会展开 fpath 数组,(.N) 限制匹配到常规文件并设置 NULL_GLOB 选项。目前为止一切顺利。问题是 _git-*~(*~|*.zwc) 部分。从我的理解来看,它首先匹配以 _git- 开头的任何内容,然后排除所有与 (*~|*.zwc) 匹配的内容,但具体指的是什么呢?


你能提供创建测试环境的命令吗?例如 mkdirtouch 文件,设置 fpath,这样只需复制粘贴即可进行实验。你使用哪个 zsh 版本? - lolesque
@lolesque:你让我找到了正确的解决方案,我已经在我的问题中加入了它。 - patheticpat
你可以并且应该像回答别人的问题一样回答自己的问题。http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ - lolesque
@lolesque,我知道,但是我必须等待至少8个小时,因为我的声望太低了。一旦时间到了,我就会把答案移到它应该在的地方。 - patheticpat
出于某种原因,我总是在使用ZSH globbing时遇到问题,我从来没有耐心去弄清楚它,似乎在这些情况下我总是会切换回bash。 - JP Silvashy
1个回答

1

我想我在为@lolesque创建测试环境时弄清楚了。

这两个~有不同的含义。第一个排除与以下模式匹配的所有内容,而第二个匹配字面上的~。因此,该模式将匹配fpath中任何目录中的_git-foo,但不匹配_git-foo~_git-foo.zwc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接