我有一个存储在变量中的字符串。
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
任何见解将不胜感激。
答案 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
假设正则表达式将与字符串的开头匹配(就像它以^
开头一样)。如果您希望正则表达式匹配起始,那么您需要在正则表达式前加.*
前缀,以便在模式开始之前成功匹配任何内容。