关于bash:在shellscript中,判断一个变量参数部分相同

Check in shellscript if a variable is partially the same as a parameter

本问题已经有最佳答案,请猛点这里访问。

因此,这是公认的为大学,但我找不到答案在任何地方,在线,也没有在课堂笔记。

我基本上取一个参数,并且必须搜索,如果这是我已经存储的较长字符串的一部分:

1
2
3
if [ *$param* = $var ]
then
...

是有问题的部分。现在对我来说真正奇怪的是,不管它说=还是!=嵌套在下的代码永远不会执行。我非常彻底地检查了代码的每一个其他部分,看起来都工作得很好。

你知道什么会导致这个吗?


你只需要颠倒论点。如果右侧操作数包含诸如*?之类的未转义元字符或括号表达式[...],则在[[ ... ]]===!=内部可以执行模式匹配。

1
if [[ $var == *"$param"* ]];   # check if $param is a substring of $var

您的代码可能执行过模式匹配,也可能没有执行过模式匹配(取决于$var的内容),但是您看到了嵌入在文字*中的值为$param的字符串是否与$var的值匹配。

例如,[[ foobar == *oba* ]]会成功,因为obafoobar的子串。由于*oba*foobar是两个不同的字符串,因此[[ *oba* == foobar ]]不会。[[ *oba* == *oba ]]也会失败,因为*oba*不是以oba结尾的字符串。


试试这个

1
2
3
if [[ $var =~ $param ]]; then
    echo"matches"
fi


我会用grep

1
2
3
if echo $var | grep -q $param; then
  echo"found it!"
fi