[2-57]
Set ist ein Zeichen , bestehend aus 2
, 3
, 4
, 5
und 7
, in zsh und jedem anderen Platzhalter und regexp Syntax gibt. Ihr Glob-Muster *[2-57]
entspricht jedem Dateinamen, dessen letztes Zeichen eine dieser fünf Ziffern ist.
Ich denke, Sie erinnern sich falsch an die Syntax des [m,n]
Glob-Qualifiers . Glob-Qualifikatoren stehen immer in Klammern am Ende des Musters, und das Bereichstrennzeichen ist ein Komma. Das Muster wird *([2,57])
auf die 2., 3.,…, 57. Übereinstimmung erweitert. Die Standard-Erweiterungsreihenfolge ist lexikografisch (mit etwas Magie, um Zahlen in numerischer Reihenfolge zu sortieren, wenn die numeric_glob_sort
Option aktiviert ist). Sie können es mit dem Qualifier o
oder O
glob steuern (z. B. *(om[2,57])
um die 57 aktuellste Datei mit Ausnahme der einen aktuellsten Datei zu finden).
for x in /foo/bar/*([2,57]); do print $x; done
Nicht das, wonach Sie gefragt haben, aber verwandt und möglicherweise nützlich für zukünftige Leser: Wenn Sie die Dateien 2 bis 57 auflisten möchten, ob sie vorhanden sind oder nicht, können Sie einen Ausdruck in geschweiften Klammern verwenden . Diese Funktion gibt es auch in bash und ksh.
echo hello{2..57}
Und wenn Sie Dateien zuordnen möchten, deren Name eine Zahl zwischen 2 und 57 enthält, können Sie das Muster verwenden <2-57>
. Dies ist spezifisch für zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Beachten Sie, dass ein Muster wie *<2-57>
das wahrscheinlich nicht das tut, was Sie erwarten, da es *
auch mit Ziffern übereinstimmen könnte. Zum Beispiel file58
Übereinstimmungen *<2-57>
mit file5
dem *
Teil und 8
dem <2-57>
Teil. Das Muster *[^0-9]<2-57>
vermeidet dieses Problem.