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)