Shell Wildcards Bug?

angelsfall

angelsfall

Routinier
Hallo,

ich wollte grade mit der Shell Dateien kopieren lassen, die nur mit einem Großbuchstaben beginnen.
Also (jaja, mit ls kann man nicht kopieren, ist schon klar :) ) :
Code:
satire)0)548)~} ls [A-Z]*.gif
Empfang.gif  Gesamt.gif  LAN.gif  projektstrukturplan.gif  Senden.gif  usecase.gif

Da dachte ich mir, da kann doch was nicht stimmen. Er ignoriert die Captials. Validiert:
Code:
satire)0)549)~} ls [a-z]*.gif
Empfang.gif  Gesamt.gif  LAN.gif  projektstrukturplan.gif  Senden.gif  usecase.gif

Allerdings tut er dies nicht, wenn man keinen Bereich angibt:
Code:
satire)0)551)~} ls [SEG]*.gif
Empfang.gif  Gesamt.gif  Senden.gif
Code:
satire)0)552)~} ls [seg]*.gif
ls: [seg]*.gif: Datei oder Verzeichnis nicht gefunden

Bash Version:
Code:
satire)0)555)~} bash --version
GNU bash, version 3.00.16(1)-release (i486-pc-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.

Anderes System, auf dem es ebenfalls nicht funkionert hat:
Code:
root@vm-host-01:~$ bash --version
GNU bash, version 3.1.17(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

Ein System, auf dem all das korrekt funktioniert hat:
Code:
~>bash --version
GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu)
Copyright (C) 2002 Free Software Foundation, Inc.

Kann das jemand verifizieren oder bin ich einfach nur zu dumm, die Shell Wildcards zu benutzen? (Scheinbar ab Bash Version 3.0)
(Laut diesem Howto sollte es aber funktionieren: http://www.tuxfiles.org/linuxhelp/wildcards.html )

Danke!
 
Interessant:
$ bash --version
GNU bash, version 3.1.17(1)-release (i586-suse-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

$ touch A B a b
$ ls
a A b B

$ ls [A-Z]*
A b B

Etwas ratlos ???

Heiko
 
$ ls [A-Z]*
A b B
Wirklich? Irgendwie fehlt da entweder das "a" oder das "b" ist zu viel ;) (Oder deins macht nochmal ganz andere Sachen)

{edit}
Hab deins rekonstruiert, bei mir kommt das gleiche. Das ist ja noch kurioser.

{edit la deuxieme}
Und weiter gehts:
Code:
satire)0)521)~/lala} ls
a  A  b  B
satire)0)522)~/lala} ls [!a-z]
ls: [!a-z]*: Datei oder Verzeichnis nicht gefunden
satire)1)523)~/lala} ls [!A-Z]
a
satire)0)524)~/lala}
 
Zuletzt bearbeitet:
Code:
┌─(z-shell@debian:pts/3)────────────────────────────────────────────────────────────(~/testdir)─┐
└─(17:43:%)── zsh --version                                                        ──(Di,Jul17)─┘
zsh 4.3.2 (i686-pc-linux-gnu)

Und gezz:

Code:
┌─(z-shell@debian:pts/3)────────────────────────────────────────────────────────────(~/testdir)─┐
└─(17:44:%)── l                                                                    ──(Di,Jul17)─┘
a  A  b  B
┌─(z-shell@debian:pts/3)────────────────────────────────────────────────────────────(~/testdir)─┐
└─(17:44:%)── l [a-z]                                                              ──(Di,Jul17)─┘
a  b
┌─(z-shell@debian:pts/3)────────────────────────────────────────────────────────────(~/testdir)─┐
└─(17:44:%)── l [A-Z]                                                              ──(Di,Jul17)─┘
A  B

:D
 
Code:
[zico@marvin test]$ bash --version
GNU bash, version 3.2.17(1)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
[zico@marvin test]$ touch A B a b
[zico@marvin test]$ ls [a-z]
a  b
[zico@marvin test]$ ls [A-Z]
A  B
[zico@marvin test]$ ls [!A-Z]
a  b
[zico@marvin test]$ ls [!a-z]
A  B
[zico@marvin test]$ ls [!a-z]*
A  B
[zico@marvin test]$ ls [!A-Z]*
a  b
 
Ok, danke an alle. Also entweder eine neuere Version oder ne andere Shell ;)
 
Ok, danke an alle. Also entweder eine neuere Version oder ne andere Shell ;)
Nö! ;)

Das hat nichts mit der bash-Version zu tun, sondern mit der Sortierung der Zeichen.

man bash
The sorting order of characters in range expressions is determined by the current locale and the value of the LC_COLLATE shell variable, if set.

Schau doch mal nach auf welchen Wert LC_COLLATE bei dir gesetzt ist.
Ich vermute mal bei dem Rechner, auf dem das globbing nicht wie gewünscht funktioniert ist LC_COLLATE nicht auf C bzw. POSIX gesetzt.



Beispiel:
Code:
$ echo $LC_COLLATE
C
$ ls [A-Z]*
A  B
$ ls [a-z]*
a  b

Code:
$ echo $LC_COLLATE

$ ls [A-Z]*
A  b  B
$ ls [a-z]*
a  A  b  B

Code:
$ echo $LC_COLLATE
POSIX
$ ls [A-Z]*
A  B
$ ls [a-z]*
a  b

In jedem Fall sollte aber
Code:
$ ls [[:upper:]]*
bzw.
Code:
$ ls [[:lower:]]*
funktionieren.
 

Ähnliche Themen

Verständnisfrage zu RegExps

Programme im PATH durch eigene Binaries ersetzen

XFCE freezes at startup

Bin ich blind?

Debian squeeze, Webmin, Samba Freigaben

Zurück
Oben