如何在if语句.sh shell中进行比较

时间:2014-09-11 17:45:52

标签: shell

我有一个存储在变量中的字符串。

a = "testing123"

我将获得的其中一个功能的输出在哪里。     b =“testing123” 但是b可能正在测试456

只要b等于测试***,就会输出输出

因此尝试获取函数的输出并将其与a进行比较,看看两者是否匹配然后宾果游戏。 现在我要做的就是:

if [ "$b" =~ testing "[0-9]*"]
   then echo "yay, finally worked"
fi

错误:它给了我[testing123而不是testing123

是的,我确实知道我可以这么做:

if [ "$a" -eq "testing123" ]

但出于学习目的,我们很高兴知道:D

任何见解将不胜感激。

3 个答案:

答案 0 :(得分:4)

您使用了错误的方括号,需要使用[[]],并记住它适用于BASH而不是sh

以下应该在BASH工作:

b="testing123"
[[ "$b" =~ ^testing[0-9]+$ ]] && echo "matched"
matched

答案 1 :(得分:0)

这个怎么样?

a="testing123"
echo "$a" | grep "^testing[0-9][0-9]*$"
if [ $? -eq "0" ]
then
  echo "yay, finally worked"
fi

我已经添加[0-9]两次以确保字符串以至少一个数字结束。如果您不想拥有至少一个号码,请仅使用[0-9]一次。希望这有帮助!

答案 2 :(得分:0)

如果你的shell不支持通过=~运算符或类似的东西直接匹配正则表达式,你可以使用expr命令作为使用grep的轻量级替代。

if expr "$a" : "testing[0-9]*$" > /dev/null; then
    echo "yay, finally worked"
fi

请注意expr假设正则表达式将与字符串的开头匹配(就像它以^开头一样)。如果您希望正则表达式匹配起始,那么您需要在正则表达式前加.*前缀,以便在模式开始之前成功匹配任何内容。