如何使用regex测试bash脚本条件中的前导连字符

如何使用regex测试bash脚本条件中的前导连字符,regex,bash,Regex,Bash,当不再有连字符时,此代码似乎不会停止。。。我做错了什么 hortense$ if [[ $BFILE =~ ^[-]* ]] ; then BFILE=${BFILE:1} ; fi hortense$ echo $BFILE Atbari hortense$ if [[ $BFILE =~ ^[-]* ]] ; then BFILE=${BFILE:1} ; fi hortense$ echo $BFILE tbari 模式^[-]*表示以0或更多-开头。 因此,即使根本没有-,它

当不再有连字符时,此代码似乎不会停止。。。我做错了什么

hortense$ if [[ $BFILE =~ ^[-]* ]] ; then BFILE=${BFILE:1} ; fi

hortense$ echo $BFILE

Atbari

hortense$ if [[ $BFILE =~ ^[-]* ]] ; then BFILE=${BFILE:1} ; fi

hortense$ echo $BFILE

tbari

模式
^[-]*
表示以0或更多
-
开头。 因此,即使根本没有
-
,它也会匹配

*
更改为
+
以至少需要一个
-

此外,您可以简单地编写
-
,而不是
[-]

总而言之:

if [[ $BFILE =~ ^-+ ]] ; then BFILE=${BFILE:1} ; fi

当然,您可以完全跳过正则表达式:

if [[ $BFILE =~ ^-+ ]] ; then BFILE=${BFILE:1} ; fi
if [[ ${BFILE:0:1} == - ]] ...

Atbari
以0或更多
-
字符开头。更惯用的用法是:
if[[$bfile=-*];然后bfile=${bfile#?};fi
:您不需要正则表达式,也不需要子字符串参数扩展来删除第一个字符,并且您希望使用小写变量名。可悲的是,这里的许多人不会向你展示好的实践。。。他们只会给你一个又快又脏的回答,只是为了得到名声。这个问题已经得到了回答!谢谢你们两位。我将学习大写变量名的重要性。