如何在Bash中比较字符串?
评论 0
浏览 0
2019-05-04
在编写Bash脚本时,你经常需要比较两个字符串,检查它们是否相等。当两个字符串具有相同的长度并且包含相同的字符序列时,它们是相等的。
本教程描述了如何在Bash中比较字符串。
比较运算符
比较运算符是比较数值并返回真或假的运算符。在Bash中比较字符串时,你可以使用以下运算符:
string1 = string2
andstring1 == string2
- 如果操作数相等,则相等运算符返回 true- 使用
=
运算符和test
[
命令结合使用。 - 使用
==
运算符和[[
命令来进行模式匹配。
- 使用
string1 != string2
- 如果操作数不相等,不等式运算符会返回true。string1 =~ regex
- 如果左边的操作数与右边的扩展正则表达式相匹配,则regex操作数返回true。string1 > string2
- 如果左边的操作数大于右边的操作数,则大于运算符的返回值为true,该运算符是按词法(字母顺序)排序的。string1 < string2
- 如果右边的操作数大于按lexicographical(字母顺序)排序的右边的操作数,小于操作数返回true。-z string
- 如果字符串的长度为零,则为true。-n string
- 如果字符串的长度不为零,则为true。
以下是在比较字符串时需要注意的几点:
- 在二进制运算符和操作数之间必须使用一个空格。
- 始终在变量名称周围使用双引号,以避免任何分词或通配符问题。
- Bash并不按 "类型 "来区分变量,变量根据上下文被视为整数或字符串。
检查两个字符串是否相等
在大多数情况下,当比较字符串时,你会想检查这些字符串是否相等。
下面的脚本使用if 语句和test [
命令来检查字符串是否与=
运算符相等:
#!/bin/bash
VAR1="Linuxize"
VAR2="Linuxize"
if [ "$VAR1" = "$VAR2" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
当脚本被执行时,它将打印出以下输出结果。
输出
Strings are equal.
这里是另一个脚本,它接受用户的输入,并对给定的字符串进行比较。在这个例子中,我们将使用[[
命令和==
运算符。
#!/bin/bash
read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2
if [[ "$VAR1" == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
运行该脚本,并在提示时输入字符串:
输出
Enter first string: Linuxize
Enter second string: Ubuntu
Strings are not equal.
你也可以使用逻辑和&&
和或||
来比较字符串:
[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
输出
Not equal
检查一个字符串是否包含一个子串
有多种方法来检查一个字符串是否包含一个子串。
一种方法是用星号符号*
包围子串,这意味着匹配所有的字符。
#!/bin/bash
VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
echo "It's there."
fi
该脚本将echo以下内容:
输出
It's there.
另一个选择是使用重合运算符=~
,如下图所示:
#!/bin/bash
VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
echo "It's there."
fi
句点后跟星号.*
,匹配零个或多个出现的任何字符(换行符除外)。
检查一个字符串是否是空的
很多时候,你也需要检查一个变量是否是空字符串。你可以通过使用-n
和-z
运算符来做到这一点。
#!/bin/bash
VAR=''
if [[ -z $VAR ]]; then
echo "String is empty."
fi
输出
String is empty.
#!/bin/bash
VAR='Linuxize'
if [[ -n $VAR ]]; then
echo "String is not empty."
fi
输出
String is not empty.
使用 Case 运算符比较字符串
你也可以使用case 语句来比较字符串,而不是使用测试运算符:
#!/bin/bash
VAR="Arch Linux"
case $VAR in
"Arch Linux")
echo -n "Linuxize matched"
;;
Fedora | CentOS)
echo -n "Red Hat"
;;
esac
输出
Linuxize matched.
字典式的比较
字典式的比较是一种操作,通过从左到右依次比较字符串中的字符,将两个字符串按字母顺序进行比较。这种比较很少使用。
以下脚本按字典顺序比较两个字符串:
#!/bin/bash
VAR1="Linuxize"
VAR2="Ubuntu"
if [[ "$VAR1" > "$VAR2" ]]; then
echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
echo "${VAR2} is lexicographically greater than ${VAR1}."
else
echo "Strings are equal"
fi
该脚本将输出以下内容:
输出
Ubuntu is lexicographically greater than Linuxize.
总结
比较字符串是Bash脚本中最基本和最经常使用的操作之一。读完本教程后,你应该对如何在Bash中比较字符串有了很好的理解。你还可以查看我们关于字符串连接的指南。
如果你有任何问题或反馈意见,请随时留言。
0 个评论