本文將從多個方面介紹Shell對比字符串的方法和技巧。
一、基本操作
Shell的對比字符串操作主要使用test或者[ ]操作符,其中test是[ ]的等價形式。可以使用man test
查看詳細幫助。
if test "hello" = "hello"
then
echo "Strings are equal."
fi
或者
if [ "hello" = "hello" ]
then
echo "Strings are equal."
fi
在[ ]中,需要注意以下幾點:
- 需要有空格:[ $a = $b ]而不是[$a=$b]
- 字符串需要用引號括起來:”hello”而不是hello
- 使用“==”需要注意
以下兩種寫法都是錯誤的:
if [ "hello" == "hello" ] # 此寫法在某些系統會出錯
if [ "hello" = "hello" ] # 此寫法才是正確的
二、忽略大小寫
如果需要忽略字符串的大小寫,可以使用tr和awk工具來實現。tr命令可以用於大寫/小寫字母的轉換,awk可以用於提取字符串並進行對比。
a="HELLO"
b="hello"
if [ $(echo "$a" | tr '[:upper:]' '[:lower:]') = $(echo "$b" | tr '[:upper:]' '[:lower:]') ]
then
echo "Strings are equal."
fi
另一種方法是使用awk來提取字符串。以下代碼使用awk來提取字符串,並對比是否相同。
a="HELLO"
b="hello"
if [ $(echo $a | awk '{print tolower($0)}') = $(echo $b | awk '{print tolower($0)}') ]
then
echo "Strings are equal."
fi
三、模式匹配
通配符可以用於字符串比較中,用於匹配一定範圍內的字符串。以下是常用的通配符符號:
- *:表示來配置0個或多個字符
- ?:表示匹配0個或1個字符
- [ ]:表示匹配中括號內的任何一個字符,例如[abc]代表a、b、c中的任意一個字符
a="hello world"
if [[ $a == h*o ]]
then
echo "Matched."
fi
上述代碼中的h*o代表以h開頭、o結尾的字符串。另一種寫法:
a="hello world"
if [[ $a == "h"*o ]]
then
echo "Matched."
fi
四、正則表達式
Shell也支持正則表達式的匹配。可以使用=~操作符來進行匹配。
a="hello world"
if [[ $a =~ ^h.*o ]]
then
echo "Matched."
fi
上述代碼中的^h.*o表示以h開頭、o結尾的字符串。
五、結語
通過本文的介紹,可以看出Shell對比字符串的方法有很多,根據不同的需求,選擇適合自己的方式進行操作即可。
原創文章,作者:ETUGW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/373598.html