You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则能匹配版本号但Bash脚本执行异常,如何解决?

Bash正则匹配版本号失败的解决办法

问题根源

Bash的[[ ... =~ ... ]]语法使用的是POSIX扩展正则表达式(ERE),和你用的在线测试工具(通常采用PCRE/Perl风格正则)语法不兼容:

  • POSIX ERE不支持\d(需替换为[0-9])
  • POSIX ERE不支持负向前瞻断言(?!...)这类Perl风格的零宽断言

修改后的兼容正则及脚本

把原正则转换成POSIX ERE兼容的写法,同时保留原版本号的校验逻辑(主版本号1-2位非0开头,次版本号1-3位不能以0开头除非是单个0,修订版本号1-4位同理):

#!/bin/bash
VERSION='1.0.0'
MATCH_PATTERN='^[1-9][0-9]{0,1}\.(0|[1-9][0-9]{0,2})\.(0|[1-9][0-9]{0,3})$'
if [[ $VERSION =~ $MATCH_PATTERN ]]; then
  echo "版本格式正确"
else
  echo "Version number format is wrong."
  exit 1
fi

正则逻辑说明

  • ^[1-9][0-9]{0,1}:主版本号,允许1-2位数字,首位不能为0(如1、12合法,01不合法)
  • \.(0|[1-9][0-9]{0,2}):次版本号,要么是单个0,要么是1-3位且首位非0的数字(如0、12、123合法,012不合法)
  • \.(0|[1-9][0-9]{0,3})$:修订版本号,要么是单个0,要么是1-4位且首位非0的数字(如0、123、1234合法,0123不合法)

内容的提问来源于stack exchange,提问作者m00s3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:58:30