【发布时间】:2012-09-17 18:26:35
【问题描述】:
我在 bash 中摆弄了 extended globbing,但反向匹配器 !(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)
【问题讨论】:
-
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)上的行为相同 -
现在,我假设这是 Bash 中的一个错误。我的错误报告:groups.google.com/d/topic/gnu.bash.bug/KkQNOi8F7q4/discussion
标签: bash pattern-matching