如何使用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
:您不需要正则表达式,也不需要子字符串参数扩展来删除第一个字符,并且您希望使用小写变量名。可悲的是,这里的许多人不会向你展示好的实践。。。他们只会给你一个又快又脏的回答,只是为了得到名声。这个问题已经得到了回答!谢谢你们两位。我将学习大写变量名的重要性。