一切正常,但我注意到正则表达式运算符=~并没有真正起作用。
例如,如果我想从路径中提取 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 中同样的事情只是打印一个空行。
有谁知道为什么以及如何解决这个问题?我是否必须以某种方式启用正则表达式支持?
没关系,找到了。所述的zsh文档澄清匹配被存储在变量match,而不是BASH_REMATCH如在击。
所以,像这样获得比赛
[[ "/a/b/c/file.json" =~ ([[:alnum:]\-]+)\.json$ ]] && echo ${match[1]}
Run Code Online (Sandbox Code Playgroud)
按预期工作。