Невозможно получить системную переменную для руководств

У меня есть следующая системная переменная в.zshrc

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

Я бегаю неудачно

zgrep -c compinit $manuals/zsh*

я получил

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

Команда должна быть такой же, как следующая команда, которая работает

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

Как вы можете запустить вышеуказанную команду с системной переменной в Zsh?

2 ответа

Решение

Судя по моим исследованиям, Zsh выполняет <> замена до $ замена. Это означает, что когда вы используете $ вариант, он сначала пытается <> замена (ничего там) тогда $ подстановка (которая работает), и вы остаетесь со строкой, содержащей <> персонажи.

Когда вы не используете $manualsсначала пробует <> замена и это работает. Это вопрос порядка. В финальной версии ниже показано, как отложить расширение, чтобы оно произошло одновременно:

Это можно увидеть здесь:

> 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

Пытаться:

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

'~' Говорит zsh выполнить расширение <0-9> при использовании переменной. Справочная карта Zsh расскажет вам, как это сделать и многое другое.

Другие вопросы по тегам