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

匹配正浮点数的Glob-Patterns正确性验证及使用方法咨询

问题1:现有glob模式正确性判断

你给出的三个模式存在多处问题,既不符合你提到的「匹配正浮点数」的初始需求,也无法覆盖你列出的匹配示例,具体问题如下:

  • 通用问题:三个模式都没有适配负号规则,仅配置了可选正号?(+),无法匹配你示例中-98、-0.23、-1.234E07这类负数值;如果你确实只需要匹配正浮点数,那示例中的负数用例本身和需求冲突。
  • pitg='?(+)*([0-9])'
    额外问题:数字部分用了*([0-9])(允许0个数字),会错误匹配空字符串、单独的+号;如果要匹配正整数,修正为pitg='?(+)+([0-9])'即可。
  • pfxp='?(+)*([0-9])?([.,])+([0-9])'
    额外问题:强制要求小数点/逗号后至少1位数字,无法匹配你示例中的3、345这类纯整数;如果要同时覆盖正整数和正定点浮点数,修正为pfxp='?(+)(+([0-9])?([.,])*([0-9])|*([0-9])[.,]+([0-9]))',可以同时兼容纯整数、1.23、.23这类格式,同时避免匹配单独的.。
  • pflp='?(+)*([0-9])?([.,])+([0-9])?([eE]?([-+])+([0-9]))'
    额外问题:科学计数法部分的规则逻辑错误,当前写法会允许E和后续数字符号分离,错误匹配1.23+45这类非法格式;修正为pflp='?(+)(+([0-9])?([.,])*([0-9])|*([0-9])[.,]+([0-9]))([eE][-+]?+([0-9]))?'即可适配正的科学计数法数值。

问题2:glob模式在条件结构中的用法

你给出的写法if [[ $num == $gptrn ]]; then是可以正常实现glob匹配的,只要满足两个前提:

  1. 提前开启扩展glob选项:这类?(...)/+(...)/*(...)语法属于bash的扩展glob能力,需要先执行shopt -s extglob开启,否则会被识别为普通字符。
  2. 模式变量不要加引号:如果写成[[ $num == "$gptrn" ]],shell会将模式当做普通字符串做全等匹配,不会触发glob规则。

使用示例:

# 开启扩展glob
shopt -s extglob
# 定义正整数匹配模式
pitg='?(+)+([0-9])'
test_num="+123"
if [[ $test_num == $pitg ]]; then
  echo "数值匹配成功"
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:36:04