与其他编程语言类似,bash 中的字符串是保存字符序列的数据类型。
在本教程中,您将学习如何使用下面讨论的各种比较运算符来比较 bash 字符串。
首先,让我们看一个创建和运行 bash 脚本的示例。
创建一个文件linuxmi.sh并在文件中写入以下代码。
greetings="Linux迷 www.linuxmi.com"
echo $greetings
输出如下:
Linux迷 www.linuxmi.com
注意:脚本中的第一行称为 shebang,它是到 bash 解释器的绝对路径。
Bash 字符串比较运算符
本节介绍用于比较 bash 字符串的各种比较运算符。比较的结果是真true或假false。
- string1=string2:单等号运算符,<strong>=, 检查string1和string2是否相等。例如,如果两个字符串包含相同的文本,OK!比较返回true。使用=,操作数被包裹在[]中。
- string1==string2: 双等号运算符,==也检查两个字符串是否相等。在这里,操作数被包裹在[[]]里面。
- string1!=string2:不等式运算符,!=检查string1是否不等于string2。如果它们不相等,则返回 true。
- string1>string2:大于运算符>检查左侧的字符串是否大于右侧的字符串。字符串之间的比较是基于它们的字母表进行的。
- string1<string2: 小于运算符<检查左侧的字符串是否小于右侧的字符串。成功时返回 true。
- string=~regex:表达式检查字符串是否与扩展的正则表达式匹配,并在成功时返回true。
- -z string: 表达式检查字符串的长度是否为0,成功时返回true。
- -n string: 表达式检查字符串的长度是否不是0,成功时返回true。
检查两个字符串是否相等
您可以使用 bash 中的三个运算符中的任何一个来检查两个字符串是否相等。运算符有单等号、双等号和不等号运算符。示例代码如下所示。
# 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语句执行条件检查以打印结果。该fi语句指示每个if-else块的结束。两个操作数字符串应该完全相同(也区分大小写)才能评价为true。因此,您可以检查字符串的准确性。
比较两个字符串的词典
您可以使用大于>或小于<运算符在 bash 中执行两个字符串的字典比较。按字典顺序,大写大于小写。在大小写相同的情况下,按照两个字符串的字母顺序进行比较。字符串之间的比较是从左到右进行的。看看下面的实际实现来理解这个概念。
# 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 进行了比较。按照字典顺序,L 被视为大于 A,后者是每个字符串的首字母。
这是因为 Unicode 字符 L (U+004C) 比 A (U+0041) 大。因此,字符串兰 Lamborghini 被评估为大于奥迪。
检查字符串是否为空
您可以使用 -n 或 -z 运算符检查字符串是否为空。示例如下所示。
# 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
在上面的演示中,两个字符串中的一个是空的。当$name为空时,-z $name表达式返回 true。因此,将执行if块。同时,表达式-z $address返回 false,因为 $address 不为空。结果,else块被执行。
您也可以将-n运算符用于类似的场景。
# 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
上面的示例显示,当字符串不为空时,-n string时返回true 。因此,该if块在检查name字符串时被执行。当检查空字符串 job时,它返回false,并且else块被执行。
检查字符串是否包含子字符串
您可以使用正则表达式运算符 ,=~来检查字符串是否包含子字符串。运算符的左侧包含字符串,而右侧包含要检查的子字符串。一个简单的例子如下所示。
# 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!. 根据字符串检查两个子字符串Sunday和Monday。由于字符串包含Monday,因此该if块在评估时被执行true。对于Sunday,它不存在于字符串中。结果,比较会导致false和else块被执行。
结论
在本教程中,您了解了一些常见的 bash 字符串比较运算符。最后,您学习了如何使用这些运算符来比较不同场景中提供的 bash 字符串。