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

Bash脚本if条件用正则匹配含两位数字的变量失败如何解决

Bash 正则匹配含两位数字的php配置路径正确实现

问题原因

你写的判断逻辑不生效,是踩了Bash正则匹配的几个常见语法坑:

  • 变量赋值写法错误:Bash中变量赋值=两侧绝对不能加空格,你写的DPHPV = /usr/local/nginx/conf/php81-remi.conf;会被解析成执行DPHPV命令,参数是=和后面的路径,根本不会完成变量赋值。
  • 正则语法错误:
    1. =~操作符是正则子串匹配,不需要像glob通配符那样前后加*,加了反而会被识别成正则量词报错
    2. POSIX数字字符类的正确写法是[[:digit:]],必须嵌套一层方括号,单独写[:digit:]只会匹配冒号、d/i/g/t这几个普通字符
    3. 给正则部分加双引号会把所有特殊字符转义成普通文本,完全失去正则匹配能力
    4. 正则里.是匹配任意单字符的特殊符号,如果要匹配文件名里的真实点号,需要转义为\.

正确实现代码

# 首先修正变量赋值,等号两侧无空格
DPHPV=/usr/local/nginx/conf/php81-remi.conf

# 正则匹配判断
if [[ "$DPHPV" =~ php[[:digit:]][[:digit:]]-remi\.conf ]]
then
    echo "匹配成功,目标为两位数字版本的php配置文件"
fi

可选优化

如果要避免匹配到php81-remi.conf.bak这类带后缀的非目标文件,可以在正则末尾加$表示匹配字符串结尾:
if [[ "$DPHPV" =~ php[[:digit:]][[:digit:]]-remi\.conf$ ]]
如果需要同时兼容1位、2位数字的版本号(比如php7-remi.conf、php81-remi.conf都命中),可以把数字部分改写为[[:digit:]]{1,2}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:09:25