zsh为模式替换指定多个字符

zsh为模式替换指定多个字符,zsh,Zsh,这个 结果如下: print Contact\ us,\ Blog/(:l:gs/ /-) 如何更改该, 我试过: contact-us,-blog 没有成功 编辑: 我看到它使用字符序列作为字符串来替换,所以这里没有模式。 有没有比顺序使用多个:gs更好的方法,当然也不使用像sed这样的外部命令?你确定print Contact\us、\Blog/(:l:gs/-)甚至是有效的zsh代码吗?冒号修饰符只能用于历史扩展、参数扩展和文件名生成,而您似乎没有使用上述任何一种。如果您试图进行参数扩

这个

结果如下:

print Contact\ us,\ Blog/(:l:gs/ /-)
如何更改该

我试过:

contact-us,-blog
没有成功

编辑: 我看到它使用字符序列作为字符串来替换,所以这里没有模式。
有没有比顺序使用多个
:gs
更好的方法,当然也不使用像
sed
这样的外部命令?

你确定
print Contact\us、\Blog/(:l:gs/-)
甚至是有效的zsh代码吗?冒号修饰符只能用于历史扩展、参数扩展和文件名生成,而您似乎没有使用上述任何一种。如果您试图进行参数扩展,那么语法将是
s=“联系我们,Blog”&&print${s:l:gs/-}
。无论如何,您要查找的是
setopt histsubspattern&&s=“联系我们,博客”&&print${s:l:gs/[,]/-}
。如果您不想修改全局选项,也可以使用
setopt localoptions
。Ref:。如果存在名为
的目录,则该选项有效,\Blog/
。。有了这个
setopt
它现在就可以工作了!起初,我认为您已经找到了一些神奇的方法来执行参数扩展,而无需指定参数。。。那太棒了。@4ae1e1有
${:-foo}
是一个默认值扩展,没有实际参数,但结果可以与任何其他扩展一样嵌套。例如,用
${${:-foo}f}
去掉前面的
f
。您确定
print Contact\us、\Blog/(:l:gs/-)
甚至是有效的zsh代码吗?冒号修饰符只能用于历史扩展、参数扩展和文件名生成,而您似乎没有使用上述任何一种。如果您试图进行参数扩展,那么语法将是
s=“联系我们,Blog”&&print${s:l:gs/-}
。无论如何,您要查找的是
setopt histsubspattern&&s=“联系我们,博客”&&print${s:l:gs/[,]/-}
。如果您不想修改全局选项,也可以使用
setopt localoptions
。Ref:。如果存在名为
的目录,则该选项有效,\Blog/
。。有了这个
setopt
它现在就可以工作了!起初,我认为您已经找到了一些神奇的方法来执行参数扩展,而无需指定参数。。。那太棒了。@4ae1e1有
${:-foo}
是一个默认值扩展,没有实际参数,但结果可以与任何其他扩展一样嵌套。例如,用
${${:-foo}#f}
去掉前面的
f
print Contact\ us,\ Blog/(:l:gs/ ,/-)
print Contact\ us,\ Blog/(:l:gs/[ ,]/-)