为什么 zsh 没有正确执行我的正则表达式?

FK8*_*K82 1 regex zsh

我开始使用zsh一段时间(使用此处描述的brew 安装)。

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


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

IE

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

工作并产生,file但在 zsh 中同样的事情只是打印一个空行。


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

FK8*_*K82 5

没关系,找到了。所述的zsh文档澄清匹配被存储在变量match,而不是BASH_REMATCH如在击。

所以,像这样获得比赛

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

按预期工作。