0

我在 .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 中使用系统变量运行上述命令?

4

2 回答 2

1

尝试:

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

'~' 告诉 zsh<0-9>在使用变量时执行扩展。zsh 参考卡告诉您如何执行此操作以及更多内容。

于 2009-04-30T05:26:13.347 回答
0

根据我的调查,看起来 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
于 2009-04-30T05:25:42.677 回答