Bash

外殼:=~ 運算符沒有按預期工作

  • November 13, 2015

考慮以下腳本:

#! /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:]]*(不帶$)仍然匹配,因為字元串開頭有零個小寫字母。

引用自:https://unix.stackexchange.com/questions/242843