I błahy wokół z extended globbing w bash, ale istnieje pewne dziwności z odwrotnym matcher !(PATTERN)
. Rozważmy następujący przykładDlaczego ten wzór pasuje do `ab`, ale nie do` ba`?
$ touch ab ba
$ shopt -s extglob
$ echo *a*
ab ba
$ echo !(a)*a*
ab ba
$ echo *a*!(a)
ab
Teraz wygląda !()
dopasowuje pusty łańcuch, ale dlaczego nie *a*!(a)
mecz ba
?
Sądziłem, że w drugim przykładzie ab
pasuje jak tak
!(a) -> ""
* -> ""
a -> "a"
* -> "b"
co z kolei mogłoby sugerować mecz ba
w trzecim przypadku jak tak
* -> "b"
a -> "a"
* -> ""
!(a) -> ""
ale wygląda tak nie robi nie działa.
Nawet biorąc pod uwagę chciwość, to nie ma dla mnie żadnego sensu. czego mi brakuje?
edit:
jestem na GNU bash, Version 4.1.7(2)-release (i386-apple-darwin10.4.0)
samo zachowanie na 'GNU bash, wersja 4.1.5 (1) -release (x86_64-pc-linux-gnu) ' –
Na razie będę zakładać, że jest to błąd w bash. Mój raport o błędzie: https://groups.google.com/d/topic/gnu.bash.bug/KkQNOi8F7q4/discussion – user123444555621