2014-11-04 152 views
0

尋找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

+0

這個腳本會清楚地給你一個錯誤,當您試圖運行它。因此,您應該在您的問題中包含錯誤。 – 2014-11-04 21:20:17

+0

它不會給出錯誤。它與var2中的1和5匹配,「15」。 – HungryFerret 2014-11-04 21:32:38

+0

你在用什麼外殼?那是* exact *腳本嗎?因爲bash會拋出@choroba正在討論避免關於賦值行上的管道符號的錯誤。 – 2014-11-04 21:35:08

回答

1

help [[

當使用`=〜」運算符,字符串操作 右邊的匹配爲正則表達式。

你的語法很好,如果有點奇怪。我個人會自己使用範圍[1-5]

var2="[1-5]" 
+0

其實它不是一個範圍。它只是數字,可以是1 | 2 | 5。 – HungryFerret 2014-11-04 21:45:01

+0

好的。但你的'[[''語法還行。 – 2014-11-04 21:48:12

1

以下行不正確:

var2=1|2|3|4|5 

垂直條具有bash中的一種特殊的意義。報價字符串:如果你想整個字符串匹配

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

,你必須包括^相匹配的開始和$到結束匹配。否則,任何匹配的子字符串都可以滿足條件。

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

嗯似乎沒有區別,仍然匹配。 – HungryFerret 2014-11-04 21:43:44

+0

@HungryFerret:當然可以。 '15'包含'1'或'5'。 – choroba 2014-11-04 22:00:33

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