Impossible d'obtenir une variable système pour les manuels
-
03-07-2019 - |
Question
J'ai la variable système suivante dans .zshrc
manuals='/usr/share/man/man<1-9>'
Je cours sans succès
zgrep -c compinit $manuals/zsh*
je reçois
zsh: no matches found: /usr/share/man/man<1-9>/zsh*
La commande doit être identique à la commande suivante qui fonctionne
zgrep -c compinit /usr/share/man/man<1-9>/zsh*
Comment pouvez-vous exécuter la commande ci-dessus avec une variable système en Zsh?
La solution
D'après mes enquêtes, il semble que zsh effectue une <>
substitution avant $
substitution. Cela signifie que lorsque vous utilisez la variante $manuals
, il commence par essayer une substitution <=> (rien), puis une substitution <=> (ce qui fonctionne), et il ne vous reste que la chaîne contenant les caractères <=>.
Lorsque vous n'utilisez pas <=>, il tente d'abord de remplacer <=> et cela fonctionne. C'est une question d'ordre. La version finale ci-dessous montre comment différer l’extension pour qu’elle se produise simultanément:
Celles-ci peuvent être vues ici:
> 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
Autres conseils
Essayez:
$> manuals=/usr/share/man/man<0-9>
$> zgrep -c compinit ${~manuals}/zsh*
Le '~' indique à zsh de développer le <0-9>
lors de l'utilisation de la variable. La carte de référence zsh vous indique comment faire cela et plus encore.