我如何正确地否定 zsh 通配符表达式?

我如何正确地否定 zsh 通配符表达式?

我想列出除以 owp 结尾的所有文件:因此我尝试:

  ls -l *.(^owp)
  zsh: unknown sort specifier
  ls -l *(^owp) 
  zsh: unknown sort specifier
  ls -l *[^o][^w][^p] # does not work either, missing some files

都不起作用。我该如何正确做到这一点?我的 .zshrc 有“set extendedglob”。

答案1

尝试以下任一方法:

ls -l ^*.owp

(即匹配除模式之外的任何内容*.owp

或者:

ls -l *~*.owp

(即匹配与模式匹配*但不匹配的任何东西*.owp

请参阅man zshexpn=> FILENAME GENERATION=>Glob Operators以了解更多详情。


附加()在 glob 模式中的是 glob 限定符,而您需要的是 glob 运算符。

作用*.(^owp)是:

  1. 匹配所有以点结尾的文件名
  2. 如果它们不是管道(^p),并且
  3. (o)按“ w” => “未知排序说明符”对匹配项进行排序

请参阅man zshexpn=> FILENAME GENERATION=>Glob Qualifiers以了解更多详情。

答案2

我在尝试从 git 中拉出一个分支时遇到了同样的问题。

例子:feature/this_feature(error_1)

我不得不逃避括号:feature/this_feature\(error_1\)

相关内容