Linux字符类匹配失效求助:无法匹配v1.65.x/v1.66.x/v1.67.x
问题原因与解决办法
你犯的核心错误是给正则表达式加了双引号——在bash的[[ ... =~ ... ]]条件判断里,右侧的正则如果被双引号包裹,会被当成普通字符串处理,字符类[7]就变成了字面的[、7、]三个字符,自然匹配不上v1.67.x里的67部分。
正确写法示例
要匹配v1.65.x、v1.66.x、v1.67.x任意版本,直接写不带引号的正则即可:
# 匹配65/66/67的范围写法 if [[ "v1.67.x" =~ v1.6[5-7] ]]; then echo matches; else echo no match; fi
执行后输出:
matches
哪怕是单个字符的字符类,去掉引号也能正常工作:
if [[ "v1.67.x" =~ v1.6[7] ]]; then echo matches; else echo no match; fi
输出同样是matches。
额外注意
如果正则里包含空格、$、*这类bash特殊字符,不要用引号包裹,而是用反斜杠单独转义特殊字符即可,比如要匹配带空格的字符串:
if [[ "v1.67 beta" =~ v1\.67\ beta ]]; then echo matches; fi
这里的.和空格用反斜杠转义,保证正则语法正常生效。
内容的提问来源于stack exchange,提问作者Kannan J
相关产品推荐
相关产品推荐

