如何在bash中使用=~

如何在bash中使用=~,bash,command-line,terminal,Bash,Command Line,Terminal,我正在尝试学习如何在bash中使用re-match opreator,如果我理解得很好,在字符串中搜索字符串将返回true如果字符串具有子字符串,我尝试: Hello='Hello sr' ; if [[ "$Hello" =~ *Hello*. ]] ; then echo '"Hello" does have the word or sentence "Hello" inside' ; else echo '"Hello&

我正在尝试学习如何在bash中使用re-match opreator,如果我理解得很好,在字符串中搜索字符串将返回true如果字符串具有子字符串,我尝试:

Hello='Hello sr' ; if [[ "$Hello" =~ *Hello*. ]] ; then echo '"Hello" does have the word or sentence "Hello" inside' ; else echo '"Hello" does not have the word or sentence "Hello" inside ' ; fi


这有什么问题?

问题在于您的匹配模式

*
匹配字符
中的0个或多个(
*
),该字符匹配除换行符以外的任何字符。现在您需要将
*Hello*
替换为
*Hello.

Hello='Hello sr' ; if [[ "$Hello" =~ .*Hello.* ]] ; then echo '"Hello" does has the word or sentence "Hello" inside' ; else echo '"Hello" doesn'"'"'t has the word or sentence "Hello" inside ' ; fi

我真的很喜欢这个页面,因为它的边栏里有备忘单,底部也解释了你的匹配模式。有了它,您可以了解很多关于您的模式的知识,并更容易地找到bug。

问题在于您的匹配模式

*
匹配字符
中的0个或多个(
*
),该字符匹配除换行符以外的任何字符。现在您需要将
*Hello*
替换为
*Hello.

Hello='Hello sr' ; if [[ "$Hello" =~ .*Hello.* ]] ; then echo '"Hello" does has the word or sentence "Hello" inside' ; else echo '"Hello" doesn'"'"'t has the word or sentence "Hello" inside ' ; fi

我真的很喜欢这个页面,因为它的边栏里有备忘单,底部也解释了你的匹配模式。通过这一点,您可以更轻松地了解您的模式并找到bug。

如果[[$Hello=~.*Hello.*]
甚至
如果[[$Hello=~Hello]]
问题是regexp不会搜索“字符串中的字符串”:它可以做到这一点,但实际上它会进行模式匹配,这更强大(也更复杂)。
if[[“$Hello”=~.*Hello.]]
甚至是[[$Hello=~Hello]]]问题在于regexp不会搜索“字符串中的字符串”:它可以这样做,但实际上它会进行模式匹配,这更强大(也更复杂)。