Augenscheinlich liefert [--f]* ( also [-f]* reicht)nur die Directories, aber das war nicht Frage.
ls -la [--0]* liefert NICHT das, was in der man-Page drinsteht.
Dort steht, dass Bindestrich, Punkt und (Ziffernzeichen für 0) gefiltert werden würden.
Stimmt aber nicht.
[--0] matcht '-', '.' und '0', weil:
- ist in ASCII und kompatiblen Zeichenkodierungen auf Position 45
. ist in ASCII und kompatiblen Zeichenkodierungen auf Position 46
0 ist in ASCII und kompatiblen Zeichenkodierungen auf Position 48
[Auf Position 47 ist der '/', aber nachdem der in Dateinamen selbst nicht auftauchen kann, spielt der hier keine Rolle.]
Beispiel in folgendem Verzeichnis:
insgesamt 6
drwxr-xr-x 2 christian users 224 28. Nov 23:12 .
drwxr-xr-x 63 christian users 6264 28. Nov 16:55 ..
-rw-r--r-- 1 christian users 0 28. Nov 23:10 0alpha
-rw-r--r-- 1 christian users 0 28. Nov 23:10 1beta
-rw-r--r-- 1 christian users 0 28. Nov 23:12 -dateimitb
-rw-r--r-- 1 christian users 0 28. Nov 23:10 .foobar
-rw-r--r-- 1 christian users 0 28. Nov 23:10 funktion
-rw-r--r-- 1 christian users 0 28. Nov 23:10 Ggamma
-rw-r--r-- 1 christian users 0 28. Nov 23:10 zdatei
Wenn man den Pattern verwendet, ergibt das:
christian@cobalt ~/tmp/glob-test $ ls -lad -- [--0]*
-rw-r--r-- 1 christian users 0 28. Nov 23:10 0alpha
-rw-r--r-- 1 christian users 0 28. Nov 23:12 -dateimitb
Kommentare:
1. Folgendes ist irrelevant für's Matching selbst:
1a. -d sort dafür, dass in Verzeichnisse nicht "hineingegangen" wird, sondern dass diese wie Dateien angezeigt werden. Mich interessiert ja nur, ob es matcht, nicht, ob da
1b. -- sorgt dafür, dass dahinter durchaus Dateien mit '-' anfangen dürfen, ohne, dass ls versucht, das als Parameter zu interpretieren.
2. Die Dateien '-dateimitb' und '0alpha' werden wie erwartet gematcht. Die Datei '.foobar' und die Verzeichnisse '.' und '..' nicht, was aber auch der Manpage entspricht:
| If a filename starts with a `.', this character must be matched
| explicitly.
Wenden wir nun Deinen Ausdruck [--f] an:
christian@cobalt ~/tmp/glob-test $ ls -lad -- [--f]*
-rw-r--r-- 1 christian users 0 28. Nov 23:10 0alpha
-rw-r--r-- 1 christian users 0 28. Nov 23:10 1beta
-rw-r--r-- 1 christian users 0 28. Nov 23:12 -dateimitb
-rw-r--r-- 1 christian users 0 28. Nov 23:10 funktion
Kommentare:
- liegt auf ASCII-Position 45
f liegt auf ASCII-Position 102
Das heißt: Alle Zeichen, die zwischen 45 und 102 liegen (einschließlich der Grenzen), werden von dieser Range gematcht. Damit fallen '0alpha', '1beta', '-dateimitb' und 'funktion' unter diese Kategorie. '.foobar', '.' und '..' wieder nicht aus dem gleichen Grund wie oben und 'zdatei' auch nicht, weil 'z' auf der ASCII-Position 122 liegt, was größer als 102 ist.
Die Bash verhält sich also vollkommen korrekt in Bezug auf die Handbuchseite.
Könntest Du daher bitte aufhören, JEDES MAL gleich die Behauptung aufzustellen, irgendwelche Software würde sich seltsam verhalten, wenn Du offensichtlich nicht gewillt bist, Dir die Manpage in RUHE anzusehen und Dir in RUHE zu überlegen, was da eigentlich genau steht?