Michelle Konzack <[EMAIL PROTECTED]> writes: > Am 2005-03-23 22:38:19, schrieb Bruno Hertz: > >> (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' > > Was bedeutet das GNU/Linux pl�tzlich Case-Insensitive geworden ist. > denn bei mir sind A-Z GROSSbuchstaben und a-z kleinBUCHSTABEN.
S.u. > >> (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) > > Aber die expandierte Liste ist enen nur [A-Z]* . > Also woher kommt dann [a-z]* ? Unter de_DE ist [A-Z] = A b B c C ... z Z > Dann darf es am BASH Prompt ja auch nicht funktionieren, > was es aber tut. Skript und interaktive Shell sollten mit demselben LC_COLLATE gleich arbeiten, richtig. Wenn es das bei dir nicht tut, hast du (noch) ein anderes Problem. Bei mir funktioniert es einheitlich. >> > LC_COLLATE=de_DE >> >> Das wird nicht gehen. Entgegen eines vorherigen Postings von mir (hatte > > Das wiederspricht dann aber das am BASH prompt es auch funktiniert. > > wenn ich z.b. > > for i in `ls -d` ; do ls $i/[A-Z]* ; echo ; done > ^^^^^ ^^^^^^^^^^^^ > Sub-SHELL Sub-SHELL > > aufrufe funktioniert es einwqndfrei, wogegen Deine Erkl�rung nicht > standh�llt. Kann ich nichts zu sagen ohne Verzeichnisinhalte und output. > Ich habe innerhalb des Scripts locale aufgerufen und es liefert die > gleiche Antwort wie am BASH prompt. > > Wenn am BASH Prompt 'ls [A-Z]*' funktioniert und im BASH Script die > gleichen locale vorhanden sind, mu� der Fehler noch woanderst liegen. Kann sein. > Ich gebe ja an das ich nur Dateien die mit GROSS Buchstaben anfangen > haben will. LC_COLLATE hat aber mit der Sortierreihenfolge zu tun. > > (hat mir jemand von der debian-devel klar gemacht) Hier versucht dir auch einer was klar zu machen, und es gestaltet sich sehr m�hsam. Deine Aussage, du g�best an 'nur GROSS Buchstaben' haben zu wollen, ist verkehrt. Unter de_DE hei�t [A-Z] eben nicht 'nur GROSS Buchstaben', sondern alle Buchstaben die gem�� der wirksamen Sortierreihenfolge in dem Range A bis Z enthalten sind. Wenn die Sortierung aber eben a A b B ... z Z ist, sind in dem Range auch alle Kleinbuchstaben au�er (klein) a enthalten. > __( command 'skript.sh de_DE' )_______________________________________ > / > | de_DE > | /home/michelle.konzack/devel/bash/[A-Z]*.tmp Wieso wird das nicht expandiert? Hast du quotes eingef�gt? > | /home/michelle.konzack/devel/bash/BASE.tmp > | /home/michelle.konzack/devel/bash/help_version.tmp > | /home/michelle.konzack/devel/bash/pid.tmp > | /home/michelle.konzack/devel/bash/prog_parts_by_option.tmp > | /home/michelle.konzack/devel/bash/read_config.tmp > | /home/michelle.konzack/devel/bash/SKEL_with_help_and_pid.tmp > | /home/michelle.konzack/devel/bash/SKEL_with_help.tmp > | /home/michelle.konzack/devel/bash/SKEL_with_pid.tmp > | /home/michelle.konzack/devel/bash/td.tmp Wie erwartet unter de_DE (f�r ls greift hier deine default locale). > | /home/michelle.konzack/devel/bash/[A-Z]*.tmp Wieso wird das nicht expandiert? So k�nnen wir es nicht mit der Ausgabe von ls vergleichen. > | /home/michelle.konzack/devel/bash/BASE.tmp > | /home/michelle.konzack/devel/bash/SKEL_with_help_and_pid.tmp > | /home/michelle.konzack/devel/bash/SKEL_with_help.tmp > | /home/michelle.konzack/devel/bash/SKEL_with_pid.tmp > | /home/michelle.konzack/devel/bash/help_version.tmp > | /home/michelle.konzack/devel/bash/pid.tmp > | /home/michelle.konzack/devel/bash/prog_parts_by_option.tmp > | /home/michelle.konzack/devel/bash/read_config.tmp > | /home/michelle.konzack/devel/bash/td.tmp Das sollte nicht sein, da du das Skript mit de_DE aufgerufen hast, was sowieso deiner default locale entspricht. Ein export macht also gar keinen Unterschied. Der Range wird zwar noch richtig von der Shell expandiert (inklusive Kleinbuchstaben), aber ls sortiert gem�� C locale. Ist dein ls veraltet (strcmp statt strcoll f�r Vergleiche) ? Aber dann sollte es oben ja das gleiche sein, da du ja mit de_DE eigentlich sowieso nichts �nderst. Sehr undurchsichtig. Hast du ein LC_COLLATE=C vor das zweite ls gesetzt? Im �brigen w�re der Vergleich mit C ja sowieso das interessante gewesen ... > \______________________________________________________________________ > > Das ist aber nicht das was ich will, denn ich habe ja [A-Z]* angegeben > und nicht [A-Za-z]*. Im Script wird einfach GROS und klein Schreibung > ignoriert. LC_COLLATE sortiert zwar richtig, aber 'ls' zeigt falsch an. Ich rede �ber die Expansion von ranges jetzt nicht nochmal. Wenn du jetzt noch nicht verstanden hast da� [A-Z] nicht automatisch 'nur Gro�buchstaben' hei�t kann ich auch nichts mehr dazu sagen. > Also ich habe hier eine Develststion mit POTATO, WOODY, SARGE und SID > chroots... > > Ich habe �berall den gleichen Fehler... (i386 + amd64) > > Auf 68k und powerpc habe ich das ergebnis wie bei Dir. Wenn der 'Fehler' mal einer ist. Aber egal, ich habe alles gesagt was ich zu sagen habe. Deine Skripte kannst du mit LC_COLLATE=C laufen lassen wenn du sie nicht auf character classes umschreiben willst, und wenn du das nicht magst ist das eben deine Sache.

