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: