在bash中查找另一个字符串变量中字符串的一部分

时间:2014-09-18 13:29:32

标签: bash shell unix

我在另一个字符串变量中查找字符串变量的一部分时遇到了问题,我尝试了很多方法,但都没有解决..

例如:

echo -e "   > Required_keyword: $required_keyword"
send_func GUI WhereAmI
echo -e "   > FUNCVALUE: $FUNCVALUE"

flag=`echo $FUNCVALUE|awk '{print match($0,"$required_keyword")}'`;

if [ $flag -gt 0 ];then

    echo "Success";
else
    echo "fail";

fi

但是它总是给出失败,尽管变量中有某些词匹配

  

0_Menu / BAA_Record ($ required_keyword输出字符串)

     

尝试连接到169.254.98.226 ......好的!执行sendFunc GUI   WhereAmI发送函数WhereAmI [OK PageName:   " _0_Menu__47 __的 BAA_Record " ($ FUNCVALUE输出字符串)

正如我们在这里看到的那样 BAA_Record 在两个输出中仍然很常见,它总是给出 FAIL

输出回显是

   > Required_keyword: 0_Menu/BAA_Record
   > FUNCVALUE: 
Trying to connect to 169.254.98.226 ... OK!


Executing sendFunc GUI WhereAmI 
Sent Function WhereAmI [OK]
PageName: "_0_Menu__47__BAA_Record"

2 个答案:

答案 0 :(得分:2)

Bash可以在双方括号内进行通配符和正则表达式匹配。

if [[ foobar == *oba* ]]    # wildcard

if [[ foobar =~ fo*b.r ]]   # regex

在你的例子中:

if [[ $FUNCVALUE = *$required_keyword* ]]

if [[ $FUNCVALUE =~ .*$required_keyword.* ]]

答案 1 :(得分:0)

不确定我是否理解你想要的东西,但是如果你需要找出变量“b”中是否存在字符串“a”的一部分,你只需使用grep。

grep -q "a" <<< "$b"

[[ "$?" -eq 0 ]] && echo "Found" || echo "Not found"

编辑:为了澄清,grep在变量b中搜索字符串a并返回退出状态(参见man grep,因此是-q开关)。之后,您可以检查退出状态并执行任何操作(使用我的示例或使用常规if语句)。