根据我的调查,看起来 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