我在bash中擺弄extended globbing,但逆匹配器!(PATTERN)
有一些奇怪之處。請看下面的例子爲什麼這個模式匹配`ab`,而不是`ba`?
$ 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,版本4.1.5(1)-release下(x86_64-PC-Linux的GNU) ' –
相同的行爲現在,我會認爲這是一個猛砸錯誤。我的錯誤報告:https://groups.google.com/d/topic/gnu.bash.bug/KkQNOi8F7q4/discussion – user123444555621