为什么ZSH不能正确执行我的正则表达式



我又开始使用ZSH(如此处所述,使用brew安装(。

一切都很好,但我注意到正则表达式操作员=~实际上并不起作用。


例如,如果我想从路径中提取JSON文件的文件名,我会在bash中获得正确的结果,但在ZSH中却没有。

即。

bash -s 
[[ "/a/b/c/file.json" =~ ([[:alnum:]-]+).json$ ]] && echo ${BASH_REMATCH[1]}

工作并产生file,但在ZSH中同样的东西只是打印一个空线。


有人知道为什么以及如何解决这个问题吗?我是否必须以某种方式启用正则支持?

没关系,找到了它。ZSH文档澄清匹配存储在变量match中,而不是BASH_REMATCH中,如bash。

所以,像这样获得比赛

[[ "/a/b/c/file.json" =~ ([[:alnum:]-]+).json$ ]] && echo ${match[1]}

正常工作。

最新更新