通配符没有按预期工作

Globbing not working as expected

我想列出 zsh 中所有不是 python 脚本的普通文件。 为什么以下 "code" 不起作用,正确的解决方案是什么?

ls -l *(.)~*.py

更新:

我的 .zshrc 中有 setopt extended_glob。 并且

ls -ld *~*.py``

按预期工作。 (我在命令中添加了 -d 以防止目录被扩展)。

问题是 ~ 是一个 glob operator(也需要设置 EXTENDED_GLOB),而 (.) 是一个 glob qualifier,表示必须加在整个pattern的末尾,不能用在中间。使用

ls *~*.py(.)

相反。也就是说,*~*.py 是您的模式(所有文件不以 .py 结尾),(.) 应用于结果。 (也许另一种说法是 glob 运算符只能在 unqualified 模式上工作。)