Es kann keine Systemvariable Arbeit für Handbücher erhalten
-
03-07-2019 - |
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?
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.