Frage

Ich habe folgende Systemvariable in .zshrc

manuals='/usr/share/man/man<1-9>'

Ich betreiben erfolglos

zgrep -c compinit $manuals/zsh*

ich

zsh: no matches found: /usr/share/man/man<1-9>/zsh*

Der Befehl soll die gleiche wie der folgenden Befehl sein, das funktioniert

zgrep -c compinit /usr/share/man/man<1-9>/zsh*

Wie können Sie den obigen Befehl mit einer Systemvariablen in Zsh laufen?

War es hilfreich?

Lösung

Aus meinen Untersuchungen sieht es aus wie zsh <> Substitution führt vor $ Substitution. Das heißt, wenn Sie die $ Variante verwenden, ist es zunächst <> Substitution (dort nichts), dann $ Substitution (das funktioniert) versucht, und Sie sind mit dem String links die <> Zeichen enthält.

Wenn Sie verwenden $manuals nicht, versucht es zuerst <> Substitution und es funktioniert. Es ist eine Frage der Ordnung. Die endgültige Version unten zeigt, wie Expansion zu verschieben, so dass sie zur gleichen Zeit geschehen:

Diese können hier eingesehen werden:

> manuals='/usr/share/man/man<1-9>'

> echo $manuals
  /usr/share/man/man<1-9>

> echo /usr/share/man/man<1-9>
  /usr/share/man/man1 /usr/share/man/man2 /usr/share/man/man3
  /usr/share/man/man4 /usr/share/man/man5 /usr/share/man/man6
  /usr/share/man/man7 /usr/share/man/man8

> echo $~manuals
  /usr/share/man/man1 /usr/share/man/man2 /usr/share/man/man3
  /usr/share/man/man4 /usr/share/man/man5 /usr/share/man/man6
  /usr/share/man/man7 /usr/share/man/man8

Andere Tipps

Versuchen:

$> manuals=/usr/share/man/man<0-9>
$> zgrep -c compinit ${~manuals}/zsh*

Die ‚~‘ sagt zsh Erweiterung des <0-9> auszuführen, wenn der Variable verwendet wird. Die zsh Referenzkarte zeigt Ihnen, wie diese und mehr tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top