bash ls [x-z]*

Software besorgen und anwenden
Antworten
Nachricht
Autor
sumsi

bash ls [x-z]*

#1 Beitrag von sumsi » 30. Sep 2006 14:17

Hallo,

habe irgendwie einen Hänger:

Liste ich

Code: Alles auswählen

 ls /usr/bin/[xyz]*
, so wird alles meinermeinung nach korrekt und klein ausegeben.

Mache ich aber

Code: Alles auswählen

ls /usr/bin/[x-z]* 
, so werden alle mit x bis z beginnenden Dateine mit klein- und großgeschrieben Anfangsbuchstaben ausgegeben.

Ist das richtig, spinnt meine Bash oder liege icharg daneben?

bye sumsi

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 30. Sep 2006 17:15

Hm. Ich hab gerade mal geguckt, ob man dieses Verhalten mit shopt -u nocaseglob beeinflussen kann, scheint aber nicht so.
Eine LC_ALL=C bash zeigt dieses Verhalten aber nicht.
Es scheint, als hättest du einen Bug in der deutschen Lokalisierung von libc gefunden. Bitte dort nachgucken.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

sumsi

lc_all

#3 Beitrag von sumsi » 01. Okt 2006 9:54

Hallo,

danke -*Treffer*.

Die "LC_ALL" war nicht gesetzt, weise ich die dem Wert "C" zu, so funktioniert die ls-Anweisung richtig.

Und wie stelle ich das nun richtig ein? Weise ich LC_ALL nun C zu, dann werden doch alle locale-Einstellungen überschrieben. Einige Anwendungen brauchen aber "de_DE.UTF-8", sonst werden werden die Sonderzeichen nicht richtig dargestellt.

Grüße sumsi

PDA

#4 Beitrag von PDA » 01. Okt 2006 12:40

Stelle mal nur die LC_CTYPE

Code: Alles auswählen

export LC_CTYPE="C"
ein. Wenn es dann klappt weisst du es.
Es kann auch die (und/oder)

Code: Alles auswählen

LC_COLLATE
sein. Ich meine aber nicht.

Wenn ich wieder vor einer Linuxkiste sitze und daran denke
werde ich es mal versuchen ob das bei mir auch so ist.

Was für eine Version hast du denn? --> libc

sumsi

treffer

#5 Beitrag von sumsi » 01. Okt 2006 13:49

Hallo,

und wieder einen Treffer gelandet:
nach

Code: Alles auswählen

export LC_COLLATE=C
wird es so angezeigt wie es richtig ist ;-)

Version ist die glibc-2.3.5, aber so richtig verstehen muss ich das nicht.
Was hat die Sortierreihenfolge mit der Auswahl zu tun?

Grüße sumsi

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

#6 Beitrag von Janka » 01. Okt 2006 17:51

Woher soll der Rechner denn wissen, dass mit x-z x|y|z gemeint ist, wenn er nicht in einer Liste nachguckt, welche Reihenfolge die Zeichen denn nun im Alphabet haben sollen? Evtl. gibt es ja Alphabete, bei denen zwischen x und z z.B. nicht nur y, sondern auch noch y mit Trema kommt...

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

sumsi

sortieren

#7 Beitrag von sumsi » 02. Okt 2006 8:37

Aber es geht doch um Gross- und Kleinschreibung.
Würde es bedeuten, dass die Buchstaben auf ASCII-Zeichen zurückgeführt (?), in dem einen Code ein grosses und in dem anderen Code ein kleines X bedeuten?

grüße sumsi

Benutzeravatar
jochen
prolinux-forum-admin
Beiträge: 699
Registriert: 14. Jan 2000 15:37
Wohnort: Jülich
Kontaktdaten:

#8 Beitrag von jochen » 02. Okt 2006 9:38

Hi,

das ist relativ einfach zu erklären. LC_COLLATE legt fest, wie die Sortierreihenfolge auszusehen hat. Nach purem ASCII kommen zuerst die Großbuchstaben, dann die Kleinbuchstaben, was man mit "LC_COLLATE=C" einstellen kann.

Das C darf man sich als "Computer" denken - es wird nicht groß was festgelegt, sondern der Computer soll sortieren, wie es für ihn "natürlich" ist (also ASCII bezgl. der Zeichen bis 127, be 128-255 also Latin1 oder UTF8). Also steht in der Sortierreihenfolge y zwischen x und z, Y ist viel weiter vorne.

Im Deutschen gilt aber, dass Groß- und Kleinbuchstaben gleich zu behandeln sind! Setzt man dies über LC_COLLATE=de, dann steht y zwischen Y und Z...

Verwendest Du [xyz], hast Du die gewünschten Zeichen exakt angegeben - es erscheinen auch nur Kleinbuchstaben. [x-z] dagegen lässt den COLLATE-Mechanismus greifen, da in D dadurch offiziell auch die Großbuchstaben gleichberechtigt sind.

Ich persönlich hasse dieses Verhalten auch. Wenn ich nicht sowieso mit einer englischen Sprachumgebung arbeite, setze ich meist "LANG=de" und "LC_COLLATE=C". Vielleicht sind auch die Kommandos "locale" und "localedef" für Dich interessant...

Jochen
Die grösste Lüge der EDV? "Mal eben..."

sumsi

;-)

#9 Beitrag von sumsi » 02. Okt 2006 11:47

Hallo,

vielen Dank für die Aufklärung ;-)

Grüße
sumsi

Antworten