用于模式的Bash if-then语句

时间:2014-11-04 21:16:04

标签: bash if-statement

寻找if / else语句的一些帮助。我有2个变量,我想要一个if语句来查看我是否可以匹配模式。

var1="15"
var2="1|2|3|4|5"

if [[ $var1 =~ $var2 ]]
then
  matches
else
  doesn't match
fi

当我尝试时,这似乎匹配。我觉得我的语法错了。我想找一个15,而不是1或5。

3 个答案:

答案 0 :(得分:1)

来自help [[

  

当使用`=〜'运算符时,运算符右侧的字符串       匹配为正则表达式。

你的语法很好,如果有点奇怪。我个人会自己使用范围[1-5]

var2="[1-5]"

答案 1 :(得分:1)

以下行不正确:

var2=1|2|3|4|5

垂直条在bash中有特殊含义。引用字符串:

var2='1|2|3|4|5'

如果您想匹配整个字符串,则必须包含^以匹配开头,$以匹配结尾。否则,任何匹配的子字符串都可以满足条件。

if [[ $var =~ ^($var2)$ ]]

答案 2 :(得分:0)

egrep -q "[1-5]" <<< 15 && echo matches || echo "doesn't match"