Bash 比較字符串詳細(xì)示例
與其他編程語言類似,bash 中的字符串是保存字符序列的數(shù)據(jù)類型。
在本教程中,您將學(xué)習(xí)如何使用下面討論的各種比較運(yùn)算符來比較 bash 字符串。
首先,讓我們看一個(gè)創(chuàng)建和運(yùn)行 bash 腳本的示例。
創(chuàng)建一個(gè)文件linuxmi.sh并在文件中寫入以下代碼。
greetings="Linux迷 www.linuxmi.com"
echo $greetings
輸出如下:
Linux迷 www.linuxmi.com
注意:腳本中的第一行稱為 shebang,它是到 bash 解釋器的絕對(duì)路徑。
Bash 字符串比較運(yùn)算符
本節(jié)介紹用于比較 bash 字符串的各種比較運(yùn)算符。比較的結(jié)果是真true或假false。
- string1=string2:?jiǎn)蔚忍?hào)運(yùn)算符,<strong>=, 檢查string1和string2是否相等。例如,如果兩個(gè)字符串包含相同的文本,OK!比較返回true。使用=,操作數(shù)被包裹在[]中。
- string1==string2: 雙等號(hào)運(yùn)算符,==也檢查兩個(gè)字符串是否相等。在這里,操作數(shù)被包裹在[[]]里面。
- string1!=string2:不等式運(yùn)算符,!=檢查string1是否不等于string2。如果它們不相等,則返回 true。
- string1>string2:大于運(yùn)算符>檢查左側(cè)的字符串是否大于右側(cè)的字符串。字符串之間的比較是基于它們的字母表進(jìn)行的。
- string1<string2: 小于運(yùn)算符<檢查左側(cè)的字符串是否小于右側(cè)的字符串。成功時(shí)返回 true。
- string=~regex:表達(dá)式檢查字符串是否與擴(kuò)展的正則表達(dá)式匹配,并在成功時(shí)返回true。
- -z string: 表達(dá)式檢查字符串的長(zhǎng)度是否為0,成功時(shí)返回true。
- -n string: 表達(dá)式檢查字符串的長(zhǎng)度是否不是0,成功時(shí)返回true。
檢查兩個(gè)字符串是否相等
您可以使用 bash 中的三個(gè)運(yùn)算符中的任何一個(gè)來檢查兩個(gè)字符串是否相等。運(yùn)算符有單等號(hào)、雙等號(hào)和不等號(hào)運(yùn)算符。示例代碼如下所示。
# Linux迷 www.linuxmi.com
String1="Good Morning!"
String2="Good Morning!"
String3="good morning!"
if [ "$String1" = "$String2" ]; then
echo "字符串1: ${String1} 和字符串2: ${String2} 相等."
else
echo "字符串1: ${String1} 和字符串2: ${String2} 不相等."
fi
if [[ "$String2" == "$String3" ]]; then
echo "字符串2: ${String2} 和字符串3: ${String3} 相等."
else
echo "字符串2: ${String2} 和字符串3: ${String3} 不相等."
fi
if [[ "$String1" != "$String3" ]]; then
echo "字符串1: ${String1} 和字符串3: ${String3} 不相等."
else
echo "字符串1: ${String1} 和字符串3: ${String3} 相等."
fi
輸出如下:
在上面的示例中,您可以看到使用if-else語句執(zhí)行條件檢查以打印結(jié)果。該fi語句指示每個(gè)if-else塊的結(jié)束。兩個(gè)操作數(shù)字符串應(yīng)該完全相同(也區(qū)分大小寫)才能評(píng)價(jià)為true。因此,您可以檢查字符串的準(zhǔn)確性。
比較兩個(gè)字符串的詞典
您可以使用大于>或小于<運(yùn)算符在 bash 中執(zhí)行兩個(gè)字符串的字典比較。按字典順序,大寫大于小寫。在大小寫相同的情況下,按照兩個(gè)字符串的字母順序進(jìn)行比較。字符串之間的比較是從左到右進(jìn)行的??纯聪旅娴膶?shí)際實(shí)現(xiàn)來理解這個(gè)概念。
# Linux迷 www.linuxmi.com
car1="Lamborghini"
car2="Audi"
if [[ "$car1" > "$car2" ]]; then
echo "${car1} is greater than ${car2}."
elif [[ "$car1" < "$car2" ]]; then
echo "${car2} is greater than ${car1}."
else
echo "Both the cars are equal"
fi
在上面的例子中,字符串 car1 和 car2 包含值 Lamborghini 和 Audi 進(jìn)行了比較。按照字典順序,L 被視為大于 A,后者是每個(gè)字符串的首字母。
這是因?yàn)?Unicode 字符 L (U+004C) 比 A (U+0041) 大。因此,字符串蘭 Lamborghini 被評(píng)估為大于奧迪。
檢查字符串是否為空
您可以使用 -n 或 -z 運(yùn)算符檢查字符串是否為空。示例如下所示。
# Linux迷 www.linuxmi.com
name=""
address="linuxmi.com"
if [[ -z $name ]]; then
echo "字符串:name為空。"
fi
if [[ -z $address ]]; then
echo "字符串:address不是空的。"
else
echo "address 是 ${address}"
fi
在上面的演示中,兩個(gè)字符串中的一個(gè)是空的。當(dāng)$name為空時(shí),-z $name表達(dá)式返回 true。因此,將執(zhí)行if塊。同時(shí),表達(dá)式-z $address返回 false,因?yàn)?$address 不為空。結(jié)果,else塊被執(zhí)行。
您也可以將-n運(yùn)算符用于類似的場(chǎng)景。
# Linux迷 www.linuxmi.com
name="LinuxMi"
job=""
if [[ -n $name ]]; then
echo "字符串:name不為空,值為 ${name}"
fi
if [[ -n $job ]]; then
echo "字符串:job不是空的。"
else
echo "字符串:job為空。"
fi
上面的示例顯示,當(dāng)字符串不為空時(shí),-n string時(shí)返回true 。因此,該if塊在檢查name字符串時(shí)被執(zhí)行。當(dāng)檢查空字符串 job時(shí),它返回false,并且else塊被執(zhí)行。
檢查字符串是否包含子字符串
您可以使用正則表達(dá)式運(yùn)算符 ,=~來檢查字符串是否包含子字符串。運(yùn)算符的左側(cè)包含字符串,而右側(cè)包含要檢查的子字符串。一個(gè)簡(jiǎn)單的例子如下所示。
# Linux迷 www.linuxmi.com
day='Today is Monday!'
if [[ $day =~ Monday ]]; then
echo "找到子字符串。"
else
echo "未找到子字符串。"
fi
if [[ $day =~ Sunday ]]; then
echo "找到子字符串。"
else
echo "未找到子字符串。"
fi
在上面的示例中,字符串是Today is Monday!. 根據(jù)字符串檢查兩個(gè)子字符串Sunday和Monday。由于字符串包含Monday,因此該if塊在評(píng)估時(shí)被執(zhí)行true。對(duì)于Sunday,它不存在于字符串中。結(jié)果,比較會(huì)導(dǎo)致false和else塊被執(zhí)行。
結(jié)論
在本教程中,您了解了一些常見的 bash 字符串比較運(yùn)算符。最后,您學(xué)習(xí)了如何使用這些運(yùn)算符來比較不同場(chǎng)景中提供的 bash 字符串。