Collation um durch LC_COLLATEdefiniert nicht nur die Sortierreihenfolge der einzelnen Zeichen, sondern auch die Bedeutung des Zeichenbereiches. Oder doch? Betrachten Sie das folgende Snippet:
unset LANGUAGE LC_ALL
echo B | LC_COLLATE=en_US grep '[a-z]'
Intuitiv Bist nicht in [a-z], daher sollte dies nichts ausgeben. Genau das passiert unter Ubuntu 8.04 oder 10.04. Aber auf einigen Computern, auf denen Debian Lenny oder Squeeze ausgeführt wird, Bwird gefunden, dass der Bereich a-zalles zwischen aund zin der Sortierreihenfolge enthält, einschließlich der Großbuchstaben Bbis Z.
Bei allen getesteten Systemen wird das en_USGebietsschema generiert. Ich habe auch versucht, das Gebietsschema zu ändern: Auf den Computern, auf denen Bdie oben angegebenen Übereinstimmungen vorliegen, geschieht dasselbe in jedem verfügbaren Gebietsschema (meistens lateinisch: {en_{AU,CA,GB,IE,US},fr_FR,it_IT,es_ES,de_DE}{iso8859-1,iso8859-15,utf-8}auch chinesisch) mit Ausnahme von Japanisch (in allen verfügbaren Codierungen) und C/ POSIX.
Was bedeuten Zeichenbereiche in regulären Ausdrücken , wenn Sie über ASCII hinausgehen? Warum gibt es einen Unterschied zwischen einigen Debian-Installationen einerseits und anderen Debian-Installationen und Ubuntu andererseits? Wie verhalten sich andere Systeme? Wer hat Recht und gegen wen sollte ein Fehler gemeldet werden?
(Beachten Sie, dass ich speziell nach dem Verhalten von Zeichenbereichen frage, z. B. [a-z]in en_USGebietsschemas, hauptsächlich auf GNU libc-basierten Systemen. Ich frage nicht, wie Kleinbuchstaben oder ASCII-Kleinbuchstaben verglichen werden sollen.)
Auf zwei Debian - Maschinen, ein , wo Bin ist [a-z]und eine , wo dies nicht der Fall, wird der Ausgang des LC_COLLATE=en_US locale -k LC_COLLATEIS
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=1
collate-codeset="ISO-8859-1"
und die Ausgabe von LC_COLLATE=en_US.utf8 locale -k LC_COLLATEist
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=2039
collate-codeset="UTF-8"
CGebietsschema als Fallback verwendet, und seine Sortierreihenfolge besteht aus geraden Bytewerten, sodass Bkeine Übereinstimmung erzielt wird. Testen Sie in einem Gebietsschema, das in der Ausgabe von angezeigt wird locale -a.
en_USgeneriert wurde.