重击错误?无法使用 negate extglob !(*/) 来过滤目录?

Sie*_*geX 3 bash shell

如果 glob*/只匹配目录,那么逻辑上 extglob!(*/)应该匹配非目录;但这行不通。这是一个错误还是我错过了什么?这适用于任何 shell 吗?

测试 1 证明*/有效

$ cd /tmp; ls -ld */
drwxr-xr-x  2 seand users 4096 Jan  1 15:59 test1//
drwxr-xr-x  2 seand users 4096 Jan  1 15:59 test2//
drwxr-xr-x  2 seand users 4096 Jan  1 15:59 test3//
Run Code Online (Sandbox Code Playgroud)

测试 2 显示潜在的错误!(*/)

$ cd /tmp; shopt -s extglob; ls -ld !(*/)
/bin/ls: cannot access !(*/): No such file or directory
Run Code Online (Sandbox Code Playgroud)

eph*_*ent 5

在 Bash 中,!()(如*?*()@())仅适用于一个路径组件。因此,不起作用。!(anything containing a / slash)

如果切换到zsh,则可以用于*(^/)匹配所有非目录,或*(.)匹配所有纯文件。