为什么zsh无法正确执行我的正则表达式?

时间:2019-07-04 20:07:29

标签: regex zsh

前一阵子我开始使用zsh(使用brew作为described here安装)。

一切都很好,但是我注意到正则表达式运算符=~并没有真正起作用。


例如,如果我想从路径中提取JSON文件的文件名,则可以在bash中获得正确的结果,而在zsh中不能得到正确的结果。

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

可以工作并产生file,但是zsh中的相同内容只是显示一个空行。


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

1 个答案:

答案 0 :(得分:2)

没关系,找到了。 zsh docs阐明匹配项存储在变量match中,而不是像Bash中那样存储在BASH_REMATCH中。

所以,获得这样的比赛

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

按预期工作。