【问题标题】:Testing variable for pattern [duplicate]模式的测试变量[重复]
【发布时间】:2013-06-06 14:16:34
【问题描述】:

我需要确保传递给我的 shell 脚本的变量与某个模式匹配。 var x 必须采用 AA-X.X.XX 的形式(即 AA-1.2.33)。如果不匹配,我需要退出。

有什么想法吗?

【问题讨论】:

  • 到目前为止你有什么?

标签: regex bash


【解决方案1】:

Bash 直接支持正则表达式。

if ! [[ $mystring ~= $pattern ]]; then
    exit
fi

【讨论】:

    【解决方案2】:

    使用 Bash 的双括号正则表达式测试

    请参阅 GNU Bash 手册中的 Conditional Constructs 以获取有关 =~ 二元运算符的完整说明。举个例子:

    good_string='AA-1.2.33'
    bad_string='BB.11.222.333'
    regex='^AA-[[:digit:]]\.[[:digit:]]\.[[:digit:]][[:digit:]]$'
    
    [[ "$good_string" =~ $regex ]]
    echo $? # 0
    
    [[ "$bad_string" =~ $regex ]]
    echo $? # 1
    

    【讨论】:

    • 非常感谢大家!我觉得我太严格了。我最终使用了以下内容,因为数字掩码会随着时间而改变。
    【解决方案3】:

    直接在 bash 中执行

    var=AA-1.2.33
    [[ $var =~ ^AA-.\..\...$ ]]
    echo $?
    0
    var=AA-1.2.3355
    [[ $var =~ ^AA-.\..\...$ ]]
    echo $?
    1
    

    【讨论】:

    • if [[ $myString == AA-* ]] then echo $? # 0 echo "hurray!" else echo $? # 0 echo "nope" fi
    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 2018-02-26
    • 2016-11-20
    • 2014-03-05
    • 2020-06-15
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    相关资源
    最近更新 更多