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

Re: Problem mit "sed" und gesetzter LANG, LC_ALL



* Quoting Johannes Hölzl <johannes.hoelzl@gmx.de>:
> $ LC_ALL="de_DE"
> $ LANG="de_DE"

Das ist schon mal wenig sinnvoll. Der Inhalt von LC_ALL überschreibt all
die anderen LC_*-Variablen und sollte nicht gesetzt werden. Stattdessen
ist dann LANG die Voreinstellung für alle nicht explizit gesetzten
Variablen. Damit kann man dann einzelne Kategorien überschreiben.

> $ env LANG=de_DE echo Diii | sed 's/\([A-Z]\)/_\1/g'
> _D_i_i_i
> $ env LANG=C echo Diii | sed 's/\([A-Z]\)/_\1/g'
> _Diii
> 
> Hier dürfte es doch keine unterschiede geben. Oder ?

Doch. LC_COLLATE bestimmt die Sortierreihenfolge. In C gibt's da nur die
ASCII-Werte, daher gilt [A-Z]=[ABCDE-WXYZ]. Andere Locales wissen mehr,
und dann ist [A-Z]=[AbBcCdD-xXyYzZ] (ohne 'a'!); das ist sehr schön beim
Sortieren, aber natürlich Blödsinn in der Shell - aber da kann man
nichts machen.

> Mit "en" gibt es das selbe Ergebnis wie mit "C" !

Sicher, denn 'en' ist keine gültige Locale, also gilt der Rückfallwert
C.

> Wo liegt der Fehler? Mach ich was falsch, bei "sed" in "locals"
> oder ist es so, wie es jetzt abläuft, richtig ?

Über richtig oder falsch kann man streiten, auf alle Fälle aber das
dokumentierte Verhalten. (Was ist "locals"?)

Ciao,
    Micha

PS: Johannes, dein Absender ist fehlformatiert. Wenn du das 'ö' nicht
    richtig rüberkriegst, nimm lieber ein 'oe'.

-- 
|=| Michael Piefel
|=| Humboldt-Universität zu Berlin
|=| Tel. (+49 30) 2093 3831



Reply to: