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

如何让Bash脚本仅匹配指定格式的带括号字符串

Bash脚本正则匹配修正问题

需求说明

需要Bash脚本的if条件仅在输入符合以下两种格式时返回true:

QUAL(12345):Some Message
PROD(45678):Some Message

现有问题

当前代码能匹配上述预期格式,但会误匹配以下非预期场景:

QAULIC(12345):Some Message
PROD34dikek(12345):Some Message.

用户现有代码

#!/bin/bash
set -x
jiraid=$(echo "$1" | awk -F'[\(\)]' '{print $2}')

if  [[ "$1" =~ ^QUAL*  ]] || [[ "$1" =~ ^PROD*  ]] && [[ $jiraid =~ ^-?[0-9]+$ ]]
then
   echo "Run Pipeline"
fi

修正方案

现有代码的问题在于正则写法错误(QUAL*会模糊匹配QUA加任意数量的L,未限定后续必须紧跟(),同时逻辑运算符优先级导致判断逻辑不符合预期。修正后的代码可以用单个完整正则完成格式校验,同时高效提取验证ID:

#!/bin/bash
set -x

if [[ "$1" =~ ^(QUAL|PROD)\(([0-9]+)\):.*$ ]]; then
    jiraid="${BASH_REMATCH[2]}"
    echo "Run Pipeline"
fi

修正说明

  • 正则精准匹配:^(QUAL|PROD)限定字符串必须以QUAL或PROD开头;\(([0-9]+)\)匹配紧跟的括号与纯数字ID;:.*$匹配冒号及后续任意内容
  • 逻辑简化:单个正则完成全格式校验,避免原代码中||与&&优先级混乱的问题
  • 高效提取ID:通过BASH_REMATCH数组直接获取正则捕获的数字ID,无需额外调用awk

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:16:14