zsh:删除变量末尾某些字符的运行

时间:2016-10-03 11:28:51

标签: zsh

为了简单起见,请考虑以下任务:

给定一个非空的shell变量var,我们知道最后一个字符是字母a,并且至少有一个字符不是a,请删除变量右侧的所有a

示例:如果变量最初包含 abcadeaaa ,则之后应包含 abcade

我想知道这是否可以在Zsh中以紧凑的方式完成。

当然,使用外部程序(例如sed)或使用 while 循环时,这是微不足道的,我们连续剥离最后a${VAR%a}),直到变量的值不再变化。两者都可以在POSIX shell,bash或ksh中工作。但是,鉴于Zsh有很多很好的扩展功能,我想知道,是否有更好的方法。

问题是匹配某个特定字符(独立的长度)的运行会对正则表达式产生影响,但参数扩展中%之后的模式以及s///替换中的模式,两者都是一个通配符模式,它不允许我做我想做的事 - 至少根据我对 zshexpn 手册页的理解。

对此有何想法?

请注意,这个问题不是为了解决现实世界的问题(在这种情况下,我只是会使用sed来完成工作,因为这样可以完成工作),但更多的是出于学术兴趣,找出我们可以扩展Zsh扩展机制的极限。

0 个答案:

没有答案