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

Bash 为什么我的正则表达式匹配子字符串而不是完整字符串?,bash,shell,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退出 我想确保根据始终以字符串release开头的正则表达式来验

我有这个剧本:

#!/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退出

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


如何在此处获取正则表达式?

您需要锚定RE,以便仅在字符串开头匹配。您也不希望在结尾处出现
*
;它意味着匹配0个或更多的前一项,在本例中是e

[[ "$a" =~ ^release ]]
也可以使用全局模式而不是正则表达式:

[[ "$a" = release* ]]

您需要锚定RE,以便仅在字符串的开头匹配。您也不希望在结尾处出现
*
;它意味着匹配0个或更多的前一项,在本例中是e

[[ "$a" =~ ^release ]]
也可以使用全局模式而不是正则表达式:

[[ "$a" = release* ]]

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

另外,您不需要插入符号来匹配字符串的开头吗?此外,任何后续字符都是句号星号(即句号为任何一个字符,星号为前一个字符的零或多个)


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

另外,您不需要插入符号来匹配字符串的开头吗?此外,任何后续字符都是句号星号(即句号为任何一个字符,星号为前一个字符的零或多个)


谢谢,我实际上知道使用if[[“$a”==release*]]谢谢,我实际上知道使用if[[“$a”==release*]]