我又开始使用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]}
正常工作。