如何在 Bash 中比較字串

Suraj Joshi 2020年9月19日 Linux Bash Linux String
如何在 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.

這裡,如果我們先用 = 運算子比較 String1String2。由於 String1String2 都具有相同的長度,具有相同的字元序列,比較運算子返回 true,因此我們得到 String1 and String2 are equal. 作為程式中第一個 if-else 塊的輸出。

同樣,在第二個程式中,我們使用 == 運算子比較 String1String2。在這種情況下,我們需要使用 [[ 進行比較。

最後,我們使用!= 運算子比較 String1String3

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.

在這個程式中,name1name2 進行了詞法比較。由於 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. 作為輸出。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn