zsh: 在变量替换中禁用通配符

4

在ksh中,我可以将变量传递给字符串操作符模式:

m=h*; a=shy;  print ${a%%${m}}

在bash中,运行这个命令会返回字符串's',但是在zsh中,*似乎被扩展了,无法避免:

m=h*; a=shy; print ${a%%${m}}
m=h*; a=shy; noglob print ${a%%${m}}

两个都仍然会给我“shy”。那么我该如何将*模式传递给字符串运算符?


感谢您提出这个有趣的问题,也许这封来自列表的电子邮件可以为您指明正确的方向:http://www.zsh.org/mla/users/2004/msg00384.html(我搜索了zsh字符串插值。)哦,还有一个关于这个概念的常见问题解答:http://zsh.sourceforge.net/FAQ/zshfaq03.html - olleolleolle
1个回答

4
我有解决方案,将“~”应用于模式中。
m=h*; a=shy;  print ${a%%$~m}

man zshexpn引用: ${~spec}
打开GLOB_SUBST选项以评估spec;如果~被双倍,则关闭它。当设置此选项时,扩展后得到的字符串将被解释为任何可能的模式,例如在文件名扩展和文件名生成以及条件中的右侧等模式匹配上下文中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接