为什么这种模式匹配`ab`,而不是'ba`?

use*_*621 8 bash pattern-matching

我在bash中使用扩展的globbing来摆弄,但是反向匹配器有些奇怪!(PATTERN).请考虑以下示例

$ touch ab ba
$ shopt -s extglob

$ echo *a*
ab ba
$ echo !(a)*a*
ab ba
$ echo *a*!(a)
ab
Run Code Online (Sandbox Code Playgroud)

现在它看起来像!()匹配空字符串,但为什么不*a*!(a)匹配ba

我假设在第二个例子ab中匹配是这样的

!(a) ->  ""
*    ->  ""
a    ->  "a"
*    ->  "b"
Run Code Online (Sandbox Code Playgroud)

反过来会ba在第三种情况下建议匹配

*    ->  "b"
a    ->  "a"
*    ->  ""
!(a) ->  ""
Run Code Online (Sandbox Code Playgroud)

但看起来这样不起作用.

即使考虑贪婪,这对我也没有任何意义.我错过了什么?

编辑:
我在GNU bash, Version 4.1.7(2)-release (i386-apple-darwin10.4.0)

use*_*621 0

这是Bash 中的一个错误

Chet Ramey 写了
[...],这将在下一个版本中修复。