J'ai bricolé avec globalisation étendue en bash, mais il y a une certaine bizarrerie avec le matcheur inverse !(PATTERN)
. Considérons l'exemple suivant
$ touch ab ba
$ shopt -s extglob
$ echo *a*
ab ba
$ echo !(a)*a*
ab ba
$ echo *a*!(a)
ab
Maintenant, ça ressemble à !()
correspond à la chaîne vide, mais pourquoi pas *a*!(a)
match ba
?
J'ai supposé que dans le deuxième exemple ab
est apparié comme suit
!(a) -> ""
* -> ""
a -> "a"
* -> "b"
ce qui à son tour suggérerait une correspondance de ba
dans le troisième cas, comme suit
* -> "b"
a -> "a"
* -> ""
!(a) -> ""
mais on dirait que ça ne marche pas.
Même en considérant la cupidité, ça n'a aucun sens pour moi. Qu'est-ce que j'ai raté ?
éditer :
Je suis sur GNU bash, Version 4.1.7(2)-release (i386-apple-darwin10.4.0)