Bash子字符串正则表达式匹配通配符

3

我正在进行bash编程,尝试测试给定变量x中是否包含子字符串"world"。我的一部分代码可以工作,但另一部分却不行。我想找出原因。

第一部分可以工作。

x=helloworldfirsttime
world=world
if [[ "$x"  == *$world* ]];then
    echo matching helloworld

第二个不起作用。
x=helloworldfirsttime
if [[ "$x"  == "*world*" ]];then
    echo matching helloworld

如何在不使用类似第一种方法的变量的情况下使第二种方法正常工作

能有人帮我修复第二个方法吗..谢谢

4个回答

8

3
x=helloworldfirsttime
$ if [[ "$x" == *world* ]]; then echo MATCHING; fi
MATCHING

这样做是因为bash的内置[[运算符将==测试的右侧视为模式:

使用 == != 运算符时,操作符右侧的字符串被用作模式,并执行模式匹配。


0

下次如果您想要在模式中添加空格,您可以使用引号""''将其括起来,只需将模式字符放在外面即可:

[[ "$x"  == *"hello world"* ]]

[[ "$x"  == *'hello world'* ]]

[[ "$x"  == *"$var_value_has_spaces"* ]]

0

你应该使用不带引号的=~运算符。

TEXT=helloworldfirsttime
SEARCH=world
if [[ "$TEXT" =~ .*${SEARCH}.* ]]; then echo MATCHING; else echo NOT MATCHING; fi
TEXT=hellowor_ldfirsttime
if [[ "$TEXT" =~ .*${SEARCH}.* ]]; then echo MATCHING; else echo NOT MATCHING; fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接