为什么我的正则表达式匹配子字符串而不是完整字符串?

时间:2020-08-18 23:34:04

标签: bash shell

我有这个脚本:

#!/bin/bash
a=`git rev-parse --abbrev-ref HEAD`
echo $a
if [[ "$a" =~ release* ]]; then
    echo "not valid branch allowed to be created"
    exit 1
fi

我要达到的目标是,仅当a的值以字符串release开头时,脚本才应以状态1退出。

我想确保针对总是以字符串a开头的正则表达式验证release的值,之后可以有其他任何字符或数字或特殊字符。但是,我在脚本中看到,如果a在其值的任何位置都包含字符串release,该脚本仍将其与正则表达式匹配并在回显下打印该值。

如何在这里获取正则表达式?

2 个答案:

答案 0 :(得分:2)

您需要锚定RE,使其仅在字符串的开头匹配。您也不希望结尾处的*;这表示匹配0个或多个先前的内容,在这种情况下为e。

[[ "$a" =~ ^release ]]

您还可以使用全局模式代替正则表达式:

[[ "$a" = release* ]]

答案 1 :(得分:0)

我对Bash正则表达式的支持不是很熟悉,但是this帖子可能会有所帮助,并提供其他一些最佳实践提示。

在旁边,您是否不需要插入符号以匹配字符串的开头?另外,任何后续字符都是句号星号(即,period是任意一个字符,星号是前一个字符的零个或多个)。

    ^release.*