如何在 Bash 中比較字串
我們可以使用各種比較運算子比較字串,並使用正規表示式檢查字串是否包含子字串。
Bash 中的字串比較
字串比較是指檢查給定的字串是否相同。如果兩個或多個字串長度相同,並且包含相同的字元序列,那麼它們就是相同的。
我們使用各種字串比較運算子,根據條件返回真或假。一些被廣泛使用的字串比較運算子可以列舉如下。
string1 = string2 |
與 [ 命令一起使用的等價運算子,如果兩個運算元相等,則返回 true 。 |
string1 == string2 |
相等運算子與 [[ 命令一起使用,如果兩個運算元都相等,則返回 true 。 |
string1 != string2 |
不等式運算子,如果兩個運算元不相等,返回 true 。 |
string1 =~ regex |
Regex 運算子,如果 string1 符合擴充套件的 regex ,則返回 true 。 |
string1 > string2 |
大於運算子,如果 string1 大於 string2 ,則根據詞法(字母)順序返回 true |
string1 < string2 |
小於運算子,如果 string1 小於 string2 ,則根據詞法(字母)順序返回 true |
-z string |
如果 string 的長度是 0 ,返回 true 。 |
-n string |
如果 string 的長度不是 0 ,返回 true 。 |
String1="Hello World!!"
String2="Hello World!!"
String3="Delft Stack"
if [ "$String1" = "$String2" ]; then
echo "String1 and String2 are equal."
else
echo "String1 and String2 are not equal."
fi
if [[ "$String1" == "$String2" ]]; then
echo "String1 and String2 are equal."
else
echo "String1 and String2 are not equal."
fi
if [[ "$String1" != "$String3" ]]; then
echo "String1 and String3 are not equal."
else
echo "String1 and String3 are equal."
fi
輸出:
String1 and String2 are equal.
String1 and String2 are equal.
String1 and String3 are not equal.
這裡,如果我們先用 =
運算子比較 String1
和 String2
。由於 String1
和 String2
都具有相同的長度,具有相同的字元序列,比較運算子返回 true
,因此我們得到 String1 and String2 are equal.
作為程式中第一個 if-else
塊的輸出。
同樣,在第二個程式中,我們使用 ==
運算子比較 String1
和 String2
。在這種情況下,我們需要使用 [[
進行比較。
最後,我們使用!=
運算子比較 String1
和 String3
。
Bash 中的詞法比較
詞法比較是指根據字母順序來比較字串。對於詞法比較,我們使用 >
和 <
運算子。
name1="Kamal"
name2="Abinash"
if [[ "$name1" > "$name2" ]]; then
echo "${name1} is greater then ${name2}."
elif [[ "$name1" < "$name2" ]]; then
echo "${name2} is greater than ${name1}."
else
echo "Both the namees are equal"
fi
輸出:
Kamal is greater then Abinash.
在這個程式中,name1
和 name2
進行了詞法比較。由於 K
在字母順序中排在 A
之後,K
的值比 A
高,因此"$name1" > "$name2"
返回 true
,我們得到 Kamal is greater then Abinash.
作為輸出。
檢查一個字串是否為空
我們使用"-n “和”-z “運算子來檢查字串是否為空。
String=""
if [[ -z $String ]]; then
echo "The variable String is an empty string."
fi
輸出:
The variable String is an empty string.
在這個程式中,string
是一個空變數。由於 -z
運算子返回 true
,如果 string
的長度是 0
,因此我們得到 The variable String is an empty string.
作為給定程式的輸出。
String="Test"
if [[ -n $String ]]; then
echo "The variable String is not an empty string."
fi
輸出:
The variable String is not an empty string.
在這個程式中,String
是一個非空變數。由於 -n
運算子返回 true
,如果 string
的長度不是 0
,因此我們得到 The variable String is not an empty string.
作為給定程式的輸出。
檢查一個字串是否包含子字串
要檢查一個字串是否包含子字串,我們可以使用 =~
(Regex
)運算子。
如果字串符合擴充套件的 regex
表示式,regex
運算子返回 true
。我們必須製作一個合適的 regex
表示式進行比較。
String='My name is Delft.'
if [[ $String =~ .*Delft.* ]]; then
echo "The given string has Delft on it."
fi
輸出:
The given string has Delft on it.
這裡,.*Delft.*
是要匹配的 regex
表示式,它表示匹配 Delft.
之前和之後的任何字串,0 個或更多字元。它檢查字串中是否有子字串 Delft
。
由於 Delft
存在於給定的字串中,給定的條件得到滿足,我們得到 The given string has Delft on it.
作為輸出。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn