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