Frage

ich den folgenden Code

zgrep -c compinit /usr/share/man/man{1..9}/zsh*

ich

zsh: no matches found: /usr/share/man/man2/zsh*

Das ist seltsam, da die folgenden Werke

echo Masi{1..9}/masi

Dies legt nahe, mir, dass das Problem um einen Fehler in Zsh sein kann.

Ist das oben ein Fehler in Zsh für {1..9}?

War es hilfreich?

Lösung

Es ist kein Fehler, und es funktioniert innerhalb von Worten in Ordnung. Das Problem Sie hier ist, dass {1..9} ist kein Wildcard-Ausdruck wie * ist; als Echo Beispiel zeigt, dann ist es eine iterative Expansion. So Ihr zgrep Beispiel ist genau das gleiche wie wenn Sie jede alternative Version in die Befehlszeile eingegeben hatte, und dann, da es keine man-Seiten mit zsh in man2 starten, es Fehler aus. (Es ist erroring auf einen Fehler, um eine Übereinstimmung zu finden, nichts an sich im Zusammenhang mit Ihrer Klammer Sequenz Expansion.)

Wenn Sie dies getan haben, auf der anderen Seite:

zgrep -c compinit /usr/share/man/man[1-9]/zsh*

würden Sie die Ergebnisse erhalten, die Sie erwarten, weil [1-9] ein normaler Wildcard Ausdruck ist.

Andere Tipps

In zsh, wenn Sie Bereiche in Dateinamen verwenden möchten, bietet zle <1-n> auf alle echten Namen kann es erweitern auf. Das heißt:

$ touch a0b a1b a5b a7b
$ print a<0-100>b

Und dann traf <Tab> direkt nach dem letzten b Sie mit print a0b a1b a5b a7b auf der Linie erweitert verlassen würde.

Für alle andere Absichten und Zwecke - vielleicht verschiedene Anforderungen, nicht-Datei und Scripting - ich würde ausdrücken dies mit der eher knappen idiomatischen zsh Schleife wie:

for n ({1..50}); do print $n; done

können Sie den gesamten Sequenzbereich von Zahlen 1 bis 50 :) verarbeiten, nach dem Sie viele nützlichen Dingen mit, wie eine Dateisammlung tun können, die noch nicht existiert:

arr=($(for n ({1..50}); do print /my/path/file$n.txt; done)) && print $arr[33]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top