前一阵子我开始使用zsh(使用brew作为described here安装)。
一切都很好,但是我注意到正则表达式运算符=~
并没有真正起作用。
例如,如果我想从路径中提取JSON文件的文件名,则可以在bash中获得正确的结果,而在zsh中不能得到正确的结果。
即
bash -s
[[ "/a/b/c/file.json" =~ ([[:alnum:]\-]+)\.json$ ]] && echo ${BASH_REMATCH[1]}
可以工作并产生file
,但是zsh中的相同内容只是显示一个空行。
有人知道为什么以及如何解决这个问题吗?我必须以某种方式启用正则表达式支持吗?
答案 0 :(得分:2)
没关系,找到了。 zsh docs阐明匹配项存储在变量match
中,而不是像Bash中那样存储在BASH_REMATCH
中。
所以,获得这样的比赛
[[ "/a/b/c/file.json" =~ ([[:alnum:]\-]+)\.json$ ]] && echo ${match[1]}
按预期工作。