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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top