[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Merkwürdige Locale-Effekte in Bash (war: Re: Wohin mit den eigenen init-Skripten?)



Martin Steigerwald <martin@lichtvoll.de> wrote:

> Krass! Wie kaputt ist das denn?

Tja, ist es kaputt? Das ist die Frage. Das Verhalten ist ja seit Jahren
bekannt und damit vermutlich auch den bash-Entwicklern. Der Artikel von
Allen ist aus 2003, der Artikel in comp.unix.shell aus 2006.

In man bash steht:

   [...] Matches any one of the enclosed characters.  A pair of
	 characters separated by a hyphen denotes a range expression;
	 any character that sorts between those two characters,
	 inclusive, using the current locale's collating sequence and
	 character set, is matched.

und weiter:

         The sorting order of characters in range expressions is
	 determined by the current locale and the value of the
	 LC_COLLATE shell variable, if set.

Da steht also, dass zwei Zeichen, getrennt durch einen Bindestrich,
einen Bereich angeben und alle Zeichen matchen, die zwischen diesen
Zeichen einsortiert sind, wobei LC_COLLATE die Sortierreihenfolge
festlegt. Und die ist, wie wir wissen, für natürliche westliche
Sprachen in der Regel a A b B, usw.

D.h. für den Bereich [a-z] folgt auf a A und nicht b. Das ist nicht
das, was man erwartet und irgendwie auch nicht intuitiv, aber falsch
ist es vermutlich nicht.

Meine Kritik, das Ganze sei inkonsitent, und die sich darauf bezog,
dass [A-Z] A b B... findet, [a-z] hingegen a A b B... ist somit auch
falsch. Es ist konsistent, da der Range für [A-Z] erst bei A beginnt
und a nicht mehr dazu gehört.

Aber gefährlich finde ich es trotzdem, weil man es von Unix sonst so
gewohnt ist, dass Suchanfragen case-sensitiv sind.

> Danke für den Hinweis.

Ich danke Dir für Deine Antwort, was dazu führte, mir das Ganze nochmal
durch den Kopf gehen zu lassen. Ich sehe es nun differenzierter.

> Ich denke, das ist einen Bugreport wert!

Tja, oder auch nicht. Ist nicht so einfach IMHO.

Gruß, Martin


Reply to: