[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.
if you want to enumerate files 2 to 57 whether they exist or not, you can use a range brace expression
. Wenn die Dateien nicht vorhanden sind und keine Übereinstimmungen vorliegen, wie kann die geschweifte Klammer erweitert werden? (Wie würde es anders ausbauen als im Glob-Qualifikationsspiel?)foo{8..11}bar
erweitert auffoo8bar foo9bar foo10bar foo11bar
. Diese Erweiterung hat nichts mit Dateinamen zu tun. Ebensofoo{eight,nine,ten,eleven}bar
erweitert umfooeightbar fooninebar footenbar fooelevenbar
. Dies ist die Klammererweiterung in ksh / bash / zsh.Da
[]
Klammern eine Liste übereinstimmender Zeichen (die Ziffern sein können) angeben , werden Zahlen nicht mathematisch interpretiert. Ein solches Muster wird mit einem einzelnen Zeichen abgeglichen . Die Liste kann Bereiche, aber auch Ziffern oder Buchstaben enthalten.[2-57]
Die Übereinstimmung wird zu "Alle Ziffern im Bereich von 2 bis 5 und eine 7" erweitert .Um die Zahlen von 2 bis 57 abzugleichen, ist es einfacher, einen Sequenzausdruck anstelle eines Globbing-Musters (oder zusammen mit einem solchen) zu verwenden:
Bearbeiten : Aber dies gibt Ihnen leider keine lexikografische Reihenfolge aller aufgelisteten Dateien - sie würden aufgrund der Shell-Erweiterung nach gemeinsamen Zahlenenden gruppiert.
quelle
[]
Dinge in der[2-57]
ist korrekt, aber ich denke nicht,{2..57}
dass (das haben Sie gemeint, richtig?) Relevant ist für das, was intrpc tun möchte, nämlich "die Dateien 2 bis 57 in lexikographischer Reihenfolge auswählen".