寻找if/else语句的帮助。我有2个变量,我想要一个if语句来查看是否可以匹配内部的模式。Bash if-then语句模式
var1="15"
var2="1|2|3|4|5"
if [[ $var1 =~ $var2 ]]
then
matches
else
doesn't match
fi
这似乎与我尝试时匹配。我有一种感觉,我的语法错了。我想找个15,而不是1或5
寻找if/else语句的帮助。我有2个变量,我想要一个if语句来查看是否可以匹配内部的模式。Bash if-then语句模式
var1="15"
var2="1|2|3|4|5"
if [[ $var1 =~ $var2 ]]
then
matches
else
doesn't match
fi
这似乎与我尝试时匹配。我有一种感觉,我的语法错了。我想找个15,而不是1或5
从help [[
:
当使用`=〜”运算符,字符串操作 右边的匹配为正则表达式。
你的语法很好,如果有点奇怪。我个人会自己使用范围[1-5]
。
var2="[1-5]"
其实它不是一个范围。它只是数字,可以是1 | 2 | 5。 – HungryFerret 2014-11-04 21:45:01
好的。但你的'[[''语法还行。 – 2014-11-04 21:48:12
以下行不正确:
var2=1|2|3|4|5
垂直条具有bash中的一种特殊的意义。报价字符串:如果你想整个字符串匹配
var2='1|2|3|4|5'
,你必须包括^
相匹配的开始和$
到结束匹配。否则,任何匹配的子字符串都可以满足条件。
if [[ $var =~ ^($var2)$ ]]
嗯似乎没有区别,仍然匹配。 – HungryFerret 2014-11-04 21:43:44
@HungryFerret:当然可以。 '15'包含'1'或'5'。 – choroba 2014-11-04 22:00:33
egrep -q "[1-5]" <<< 15 && echo matches || echo "doesn't match"
这个脚本会清楚地给你一个错误,当您试图运行它。因此,您应该在您的问题中包含错误。 – 2014-11-04 21:20:17
它不会给出错误。它与var2中的1和5匹配,“15”。 – HungryFerret 2014-11-04 21:32:38
你在用什么外壳?那是* exact *脚本吗?因为bash会抛出@choroba正在讨论避免关于赋值行上的管道符号的错误。 – 2014-11-04 21:35:08