Невозможно получить системную переменную для руководств - PullRequest
0 голосов
/ 30 апреля 2009

У меня есть следующая системная переменная в .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 ]

1 голос
/ 30 апреля 2009

Попробуйте:

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

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

0 голосов
/ 30 апреля 2009

Из моих исследований похоже, что 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
...