如何在 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