Bash
外殼:=~ 運算符沒有按預期工作
考慮以下腳本:
#! /bin/bash line="confusing" if [[ $line =~ [[:lower:]]* ]] then echo "matches!" else echo "does not match." fi
雖然上述產生了預期的結果,但以下不會:
#! /bin/bash line="CoNfUsInG" if [[ $line =~ [[:lower:]]* ]] then echo "matches!" else echo "does not match." fi
這將列印“匹配!”
我很困惑; 正則表達式不是
[[:lower:]]*
表示零個或多個小寫字母嗎?當以下內容也列印“匹配!”時,它變得更加混亂!
#! /bin/bash line="CoNfUsInG" if [[ $line =~ [[:digit:]]* ]] then echo "matches!" else echo "does not match." fi
任何人都可以解釋為什麼會發生這種情況?
正則表達式不必匹配整個字元串。這就是為什麼你分別有字元串開始
^
和$
結束的原因。[[ CoNfUsInG =~ ^[[:lower:]]*$ ]] || echo no
ConfUsInGlY,
^[[:lower:]]*
(不帶$
)仍然匹配,因為字元串開頭有零個小寫字母。