我在 bash 中摆弄了扩展的 globbing,但是 inverse matcher 有一些奇怪的地方!(PATTERN)
。考虑以下示例
$ touch ab ba
$ shopt -s extglob
$ echo *a*
ab ba
$ echo !(a)*a*
ab ba
$ echo *a*!(a)
ab
现在它看起来像!()
匹配空字符串,但为什么不*a*!(a)
匹配ba
?
我假设在第二个例子ab
中是这样匹配的
!(a) -> ""
* -> ""
a -> "a"
* -> "b"
这反过来会建议ba
在第三种情况下匹配
* -> "b"
a -> "a"
* -> ""
!(a) -> ""
但看起来这不起作用。
即使考虑到贪婪,这对我来说也没有任何意义。我错过了什么?
编辑:
我在GNU bash, Version 4.1.7(2)-release (i386-apple-darwin10.4.0)