在shellscript中检查变量是否与参数部分相同

时间:2018-11-16 17:20:38

标签: bash shell

所以这当然是上大学的,但是我找不到任何地方的答案,也没有在线或在讲义中找不到答案。

如果我已经存储了一个较长的字符串,那么我基本上需要一个参数,并且必须进行搜索:

if [ *$param* = $var ]
then
...

是有问题的部分。现在,对我而言真正奇怪的是,无论是说=还是!=,嵌套在下面的代码都永远不会执行。我非常仔细地检查了代码的其他每个部分,看起来一切正常。

您有什么想法可能导致这种情况吗?

3 个答案:

答案 0 :(得分:3)

您只需要反转参数即可。如果右侧操作数包含未转义的元字符(如java.nio和{{1}),则[[ ... ]]===!=内部可以执行模式匹配}或方括号表达式*

?

您的代码可能已执行或可能未执行模式匹配(取决于[...]的内容,但是您正在查看是否在文字if [[ $var == *"$param"* ]]; # check if $param is a substring of $var 中嵌入了值为$var的字符串匹配$param的值。

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

答案 1 :(得分:0)

我会使用grep

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

答案 2 :(得分:0)

尝试一下

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