Hallo,
Deine Frage ist leider etwas schwierig zu beantworten... 
Das Problem ist ,dass 'xyz' in
*keine* 'regexp' (regular expression) ist. Es ist stattdessen ein 'globbing'
Siehe die man page
Es kann sein, dass
oder
[A-F] = [AbBcCdDeEfF] >>> ohne das 'a' !!!
wohingegen
[a-f] = [aAbBcCdDeEf] >>> ohne das 'F' !!!
usw.
Was genau jetzt gilt ist von Deinem 'environment' abhängig. Zum Beispiel:
> locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
>
Alles anzeigen
und hier insbesondere die Variable
Wenn Du (z.B.) ein Verz. mit folgenden Dateien hast:
Abc.txt
Bcd.txt
Cde.txt
abc.txt
bcd.txt
cde.txt
Dann ergibt
> LC_COLLATE="en_US" ls -1 [A-C]*
Abc.txt
bcd.txt
Bcd.txt
cde.txt
Cde.txt
>
>>> abc.txt ist nicht dabei weil nicht in [A-C] enthalten!
> LC_COLLATE="en_US" ls -1 [A-C]*
Abc.txt
bcd.txt
Bcd.txt
cde.txt
Cde.txt
>
> LC_COLLATE="C" ls -1 [A-C]*
Abc.txt
Bcd.txt
Cde.txt
bcd.txt
cde.txt
>
> LC_COLLATE="C" ls -1 [a-c]*
Abc.txt
Bcd.txt
abc.txt
bcd.txt
cde.txt
>
>>> Cde.txt ist nicht dabei weil nicht in [a-c] enthalten!
Willst Du also nur Abc.*, Bcd.* und Cde.* finden, dann braucht es eine explizite Spezifikation (ohne '-'):
Die Sache ist, wie gesagt, nicht ganz so einfach wie vielleicht erwartet.
Siehe hier:
http://www.faqs.org/docs/bashman/bashref_35.html
Gruss,
Roland