Bash 字串比較


在 Bash 程式設計中,字串比較是一個每個開發者都需要熟悉的核心概念。Bash 字串比較涉及比較兩個字串,並評估它們是否相等、不相等、大於或小於彼此。理解如何在 Bash 中比較字串對於編寫可靠且健壯的指令碼至關重要。

在本文中,我們將探討 Bash 字串比較的基礎知識,並提供示例以幫助您更好地理解這個概念。我們將從比較運算子的介紹開始,然後繼續介紹不同型別的字串比較技術。

比較運算子

Bash 提供各種運算子來比較字串,包括 ==、!=、<、>、-z 和 -n。讓我們仔細看看每個運算子。

== 運算子

== 運算子檢查兩個字串是否相等。這是一個示例:

示例

string1="Hello"
string2="Hello"
if [ "$string1" == "$string2" ]
then
   echo "The two strings are equal"
fi

輸出

The two strings are equal

在這個例子中,我們在變數 string1 和 string2 中儲存了兩個字串“Hello”。== 運算子檢查兩個字串是否相等,如果相等,程式會在螢幕上列印“這兩個字串相等”。

!= 運算子

!= 運算子檢查兩個字串是否不相等。這是一個示例:

示例

string1="Hello"
string2="World"
if [ "$string1" != "$string2" ]
then
   echo "The two strings are not equal"
fi

輸出

The two strings are equal

在這個例子中,我們在變數 string1 和 string2 中儲存了兩個字串“Hello”和“World”。!= 運算子檢查兩個字串是否不相等,如果不相等,程式會在螢幕上列印“這兩個字串不相等”。

< 運算子

< 運算子檢查第一個字串是否小於第二個字串。這是一個示例:

string1="Apple"
string2="Banana"
if [ "$string1" < "$string2" ]
then
   echo "The first string is less than second string"
fi

在這個例子中,我們在變數 string1 和 string2 中儲存了兩個字串“Apple”和“Banana”。< 運算子檢查第一個字串“Apple”是否小於第二個字串“Banana”,如果小於,程式會在螢幕上列印“第一個字串小於第二個字串”。

> 運算子

> 運算子檢查第一個字串是否大於第二個字串。這是一個示例:

string1="Banana"
string2="Apple"
if [ "$string1" > "$string2" ]
then
   echo "The first string is greater than second string"
fi

在這個例子中,我們在變數 string1 和 string2 中儲存了兩個字串“Banana”和“Apple”。> 運算子檢查第一個字串“Banana”是否大於第二個字串“Apple”,如果大於,程式會在螢幕上列印“第一個字串大於第二個字串”。

-z 運算子

-z 運算子檢查字串是否為空。這是一個示例:

示例

string1=""
if [ -z "$string1" ]
then
   echo "The string is empty"
fi

輸出

The string is empty

在這個例子中,我們在變數 string1 中儲存了一個空字串。-z 運算子檢查字串是否為空,如果為空,程式會在螢幕上列印“字串為空”。

-n 運算子

-n 運算子檢查字串是否不為空。這是一個示例:

示例

string1="Hello"
if [ -n "$string1" ]
then
   echo "The string is not empty"
fi

輸出

The string is not empty

在這個例子中,我們在變數 string1 中儲存了一個非空字串“Hello”。-n 運算子檢查字串是否不為空,如果不為空,程式會在螢幕上列印“字串不為空”。

字串比較技術

除了比較運算子之外,還有幾種在 Bash 中比較字串的技術。讓我們探討其中一些技術。

數值比較

當比較儲存為字串的數字時,使用數值比較。例如:

示例

string1="10"
string2="20"
if [ "$string1" -lt "$string2" ]
then
   echo "The first number is less than second number"
fi

輸出

The first number is less than second number

在這個例子中,我們在變數 string1 和 string2 中儲存了兩個數字“10”和“20”。我們使用 -lt 運算子來檢查第一個數字是否小於第二個數字,如果小於,程式會在螢幕上列印“第一個數字小於第二個數字”。

不區分大小寫的比較

不區分大小寫的比較用於比較字串,而不管其大小寫如何。例如:

示例

string1="hello"
string2="HELLO"
if [ "${string1,,}" == "${string2,,}" ]
then
   echo "The two strings are equal"
fi

輸出

The two strings are equal

在這個例子中,我們在變數 string1 和 string2 中儲存了兩個字串“hello”和“HELLO”。我們使用引數擴充套件將兩個字串都轉換為小寫,然後使用 == 運算子檢查兩個字串是否相等。如果相等,程式會在螢幕上列印“這兩個字串相等”。

子串比較

子串比較用於比較字串的一部分。例如:

示例

string1="Hello World"
substring="Hello"
if [[ "$string1" == *"$substring"* ]]
then
   echo "The substring is present in string"
fi

輸出

The substring is present in string

在這個例子中,我們在變數 string1 中儲存了一個字串“Hello World”,在變數 substring 中儲存了一個子串“Hello”。我們使用 == 運算子和 * 萬用字元來檢查子串是否出現在字串中,如果出現,程式會在螢幕上列印“子串出現在字串中”。

其他技術

除了上面提到的技術之外,還有一些其他的 Bash 字串比較技術你可能會覺得有用。

正則表示式比較

當需要根據模式比較字串時,使用正則表示式比較。例如:

示例

string1="hello world"
pattern="^hello.*$"
if [[ "$string1" =~ $pattern ]]
then
   echo "The string matches pattern"
fi

輸出

The string matches pattern

在這個例子中,我們在變數 string1 中儲存了一個字串“hello world”,在變數 pattern 中儲存了一個正則表示式模式“^hello.*$”。我們使用 =~ 運算子來檢查字串是否匹配模式,如果匹配,程式會在螢幕上列印“字串匹配模式”。

長度比較

長度比較用於根據字串的長度進行比較。例如:

示例

string1="hello"
string2="world"
if [ "${#string1}" -lt "${#string2}" ]
then
   echo "The first string is shorter than second string"
fi

在這個例子中,我們在變數 string1 和 string2 中儲存了兩個字串“hello”和“world”。我們使用 ${#string} 引數擴充套件獲取每個字串的長度,然後使用 -lt 運算子檢查第一個字串是否短於第二個字串。如果短於,程式會在螢幕上列印“第一個字串短於第二個字串”。

空值比較

空值比較用於比較變數是否已設定。例如:

string1=""
if [ -z "${string1+x}" ]
then
   echo "The variable is not set"
fi

在這個例子中,我們在變數 string1 中儲存了一個空字串。我們使用 ${string+x} 引數擴充套件來檢查變數是否已設定,然後使用 -z 運算子來檢查它是否未設定。如果未設定,程式會在螢幕上列印“變數未設定”。

Bash 字串比較最佳實踐

在使用 Bash 中的字串比較時,您可以遵循一些最佳實踐,以確保您的指令碼可靠且高效。以下是一些您可以考慮的最佳實踐:

使用雙引號

在 Bash 中比較字串時,必須將變數括在雙引號中,以確保字串被正確解釋。例如:

string1="hello"
string2="world"
if [ "$string1" == "$string2" ]
then
   echo "The two strings are equal"
fi

在這個例子中,我們使用雙引號將變數 string1 和 string2 括起來,確保字串被正確解釋。

使用 [[ ... ]] 而不是 [ ... ]

執行字串比較時,建議使用 [[ ... ]] 條件表示式而不是 [ ... ] 測試命令。[[ ... ]] 表示式提供了額外的功能,例如模式匹配和正則表示式。例如:

示例

string1="hello world"
pattern="^hello.*$"
if [[ "$string1" =~ $pattern ]]
then
   echo "The string matches pattern"
fi

輸出

The string matches pattern

在這個例子中,我們使用 [[ ... ]] 條件表示式將字串與正則表示式模式進行比較。

結論

總而言之,Bash 字串比較是每個開發人員都應該熟悉的核心概念。透過理解各種比較運算子和技術,您可以編寫可靠且健壯的指令碼,有效地處理字串比較。當您繼續使用 Bash 時,您會遇到需要字串比較的不同場景,並且必須有創造力並找到處理每個場景的最佳方法。透過本文中獲得的知識,您現在已經能夠處理 Bash 中大多數字符串比較場景。

更新於:2023年4月12日

3K+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.