所以这当然是上大学的,但是我找不到任何地方的答案,也没有在线或在讲义中找不到答案。
如果我已经存储了一个较长的字符串,那么我基本上需要一个参数,并且必须进行搜索:
if [ *$param* = $var ]
then
...
是有问题的部分。现在,对我而言真正奇怪的是,无论是说=还是!=,嵌套在下面的代码都永远不会执行。我非常仔细地检查了代码的其他每个部分,看起来一切正常。
您有什么想法可能导致这种情况吗?
答案 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