Michelle Konzack <[EMAIL PROTECTED]> writes: > Am 2005-03-23 21:07:53, schrieb Bruno Hertz: > >> Um auch für die Shell also LC_COLLATE auf C zu setzen >> LC_COLLATE=C >> ls $HOME/devel/bash/[A-Z]*.tmp > > Hä ? Für was ?
Stimmt, war falsch. Richtig: export LC_COLLATE=C ls $HOME/devel/bash/[A-Z]*.tmp > Ein 'ls $HOME/devel/bash/[A-Z]*.tmp' benötigt kein LC_COLLATE. Inkorrekt. Es braucht es sogar zweimal: (1) $HOME/devel/bash/[A-Z]*.tmp wird von der Shell expandiert. Die Reihenfolge wird dabei bestimmt von LC_COLLATE. man bash, 'path expansion' und 'range expression' (2) ls erhält die expandierte Parameterliste und sortiert jetzt aber nochmal, wieder gemäß LC_COLLATE. Deshalb oben das export. man strcoll (wird von ls verwendet) > Das LC_COLLATE ist nur bei 'ls $HOME/devel/bash/*.tmp' witksam. Leider falsch. man bash. >> Um es auch für Subshells/geforkte Prozesse wirksam zu machen >> export LC_COLLATE=C > > Das will ich aber nicht... > > LC_COLLATE=de_DE Das wird nicht gehen. Entgegen eines vorherigen Postings von mir (hatte einen Fehler gemacht weil bei mir de_DE überhaupt nicht installiert war, deshalb hatte ein entsprechendes collate setting auch keine Auswirkung) ist die collation order für de_DE die gleiche wie bei en_US, nämlich a A b B .... z Z D.h. eine range expression der Form [A-C] enthält die Buchstaben A b B c C d.h. eben nicht nur Grossbuchstaben, und gemäß dieser Reihenfolge wird auch sortiert. Du kannst aber [ABCDEFGHIJKLMNOPQRSTUVWXYZ] schreiben, das geht dann auch mit de_DE :) Die collation order ist für die country locales vor einiger Zeit mal umgestellt worden (sie war vorher wie ASCII, i.e. entsprechend LC_COLLATE=C). Das ist aber schon Jahre her, meine ich ... >> Wie du auf RegExp kommst ist mir ein Rätsel. Hat das irgendjemand erwähnt? >> Und brüllen mußt du auch nicht unbedingt ... > > Esa geht darum das die BASH [A-Z]* expandiert, > aber ein SCRIPT in der gleichen Shell es ignoriert. Du meinst daß das Skript anders expandiert als die Shell. Mit regexps hat das aber nichts zu tun, und das hat auch niemand behauptet. > Ihr redet nur con LC_COLLATE was nichts damit zu tun hat. > Ich habe erste heute vormittag eine WOODY Maschine von den 3.0r0 > CD's installiert und mein Script funktioniert... Unser Thema war die Sortierreihenfolge von Ausdrücken wie ls /irgendeinpfad/[A-Z]*.irgendwas und welche Buchstaben (klein,groß) in solchen range expressions vorkommen. Und das ist sowohl was die shell expansion als auch die Sortierung von ls angeht bestimmt von LC_COLLATE. Probier's dochmal mit einem Testskript der Form LC_COLLATE=$1 echo $LC_COLLATE # shell expansion gemäß $1 echo /irgendeinpfad/[A-Z]*.irgendwas # shell expansion und sortierung von ls; da LC_COLLATE nicht # exportiert wurde, greift $1 hier noch nicht ls /irgendeinpfad/[A-Z]*.irgendwas export LC_COLLATE # shell expansion gemäß $1 echo /irgendeinpfad/[A-Z]*.irgendwas # ausgabe von ls sollte mit vorherigem echo korrespondieren # da LC_COLLATE exportiert wurde ls /irgendeinpfad/[A-Z]*.irgendwas und ruf es mit skript.sh C resp. de_DE und wasnoch auf. Dann wird die Sache vielleicht klarer. > Nach dem Update auf r4 funktionierren keine BACKUP-Scripts und > jede menge andere Scrips nicht mehr. Schlimm. > Soweit ich das aus GOOLGE erfahren habe hängt das mit dem Security > update der libc6 zusammen... da ist was kaputt gegangen. Kann sein. Wie gesagt habe ich kein Woody, nur Sarge. Letztres ist aber up-to-date, und die Dinge funktionieren hier genau so wie von mir beschrieben. > LC_COLLATE="[EMAIL PROTECTED]" OK, das sollte dann aber auch für die interaktive Shell gelten. Wenn die mit diesem setting [A-Z] in A B C ... Z expandiert, ist etwas komisch. Sie sollte es in a A b B ... z Z expandieren, interaktiv ebenso wie per Skript.