尽管设置了 EXTENDED_GLOB,但 zsh glob 模式匹配除一个文件之外的所有文件,不起作用

尽管设置了 EXTENDED_GLOB,但 zsh glob 模式匹配除一个文件之外的所有文件,不起作用

我有一个包含几个文件的目录:

$ ls tdir
xx  yy zz

我正在寻找一个zsh全局模式,它扩展到除xx.这是我尝试过的:

$ set -o EXTENDED_GLOB
$ echo tdir/*~xx
tdir/xx tdir/yy tdir/zz

正如我们所看到的,这是行不通的;*~xx没有按照我预期的方式扩展。我该如何正确地写这个?

答案1

(and-not)运算glob~filter符应用过滤器作为整个 glob 结果的负模式匹配。

这允许这样的事情:

grep foo ./**/*~*/.svn/*(.mh-1)

例如。

在这里,你需要:

echo tdir/*~tdir/xx

或者:

echo tdir/*~*/xx

或者:

echo tdir/(*~xx)

或者使用^否定运算符来代替:

echo tdir/^xx

相关内容