Bash 字符串比较


在 Bash 编程中,字符串比较是一个每个开发者都需要熟悉的核心概念。Bash 字符串比较涉及比较两个字符串,并评估它们是否相等、不相等、大于或小于彼此。理解如何在 Bash 中比较字符串对于编写可靠且健壮的脚本至关重要。

在本文中,我们将探讨 Bash 字符串比较的基础知识,并提供示例以帮助您更好地理解这个概念。我们将从比较运算符的介绍开始,然后继续介绍不同类型的字符串比较技术。

比较运算符

Bash 提供各种运算符来比较字符串,包括 ==、!=、<、>、-z 和 -n。让我们仔细看看每个运算符。

== 运算符

== 运算符检查两个字符串是否相等。这是一个示例:

示例

string1="Hello"
string2="Hello"
if [ "$string1" == "$string2" ]
then
   echo "The two strings are equal"
fi

输出

The two strings are equal

在这个例子中,我们在变量 string1 和 string2 中存储了两个字符串“Hello”。== 运算符检查两个字符串是否相等,如果相等,程序会在屏幕上打印“这两个字符串相等”。

!= 运算符

!= 运算符检查两个字符串是否不相等。这是一个示例:

示例

string1="Hello"
string2="World"
if [ "$string1" != "$string2" ]
then
   echo "The two strings are not equal"
fi

输出

The two strings are equal

在这个例子中,我们在变量 string1 和 string2 中存储了两个字符串“Hello”和“World”。!= 运算符检查两个字符串是否不相等,如果不相等,程序会在屏幕上打印“这两个字符串不相等”。

< 运算符

< 运算符检查第一个字符串是否小于第二个字符串。这是一个示例:

string1="Apple"
string2="Banana"
if [ "$string1" < "$string2" ]
then
   echo "The first string is less than second string"
fi

在这个例子中,我们在变量 string1 和 string2 中存储了两个字符串“Apple”和“Banana”。< 运算符检查第一个字符串“Apple”是否小于第二个字符串“Banana”,如果小于,程序会在屏幕上打印“第一个字符串小于第二个字符串”。

> 运算符

> 运算符检查第一个字符串是否大于第二个字符串。这是一个示例:

string1="Banana"
string2="Apple"
if [ "$string1" > "$string2" ]
then
   echo "The first string is greater than second string"
fi

在这个例子中,我们在变量 string1 和 string2 中存储了两个字符串“Banana”和“Apple”。> 运算符检查第一个字符串“Banana”是否大于第二个字符串“Apple”,如果大于,程序会在屏幕上打印“第一个字符串大于第二个字符串”。

-z 运算符

-z 运算符检查字符串是否为空。这是一个示例:

示例

string1=""
if [ -z "$string1" ]
then
   echo "The string is empty"
fi

输出

The string is empty

在这个例子中,我们在变量 string1 中存储了一个空字符串。-z 运算符检查字符串是否为空,如果为空,程序会在屏幕上打印“字符串为空”。

-n 运算符

-n 运算符检查字符串是否不为空。这是一个示例:

示例

string1="Hello"
if [ -n "$string1" ]
then
   echo "The string is not empty"
fi

输出

The string is not empty

在这个例子中,我们在变量 string1 中存储了一个非空字符串“Hello”。-n 运算符检查字符串是否不为空,如果不为空,程序会在屏幕上打印“字符串不为空”。

字符串比较技术

除了比较运算符之外,还有几种在 Bash 中比较字符串的技术。让我们探讨其中一些技术。

数值比较

当比较存储为字符串的数字时,使用数值比较。例如:

示例

string1="10"
string2="20"
if [ "$string1" -lt "$string2" ]
then
   echo "The first number is less than second number"
fi

输出

The first number is less than second number

在这个例子中,我们在变量 string1 和 string2 中存储了两个数字“10”和“20”。我们使用 -lt 运算符来检查第一个数字是否小于第二个数字,如果小于,程序会在屏幕上打印“第一个数字小于第二个数字”。

不区分大小写的比较

不区分大小写的比较用于比较字符串,而不管其大小写如何。例如:

示例

string1="hello"
string2="HELLO"
if [ "${string1,,}" == "${string2,,}" ]
then
   echo "The two strings are equal"
fi

输出

The two strings are equal

在这个例子中,我们在变量 string1 和 string2 中存储了两个字符串“hello”和“HELLO”。我们使用参数扩展将两个字符串都转换为小写,然后使用 == 运算符检查两个字符串是否相等。如果相等,程序会在屏幕上打印“这两个字符串相等”。

子串比较

子串比较用于比较字符串的一部分。例如:

示例

string1="Hello World"
substring="Hello"
if [[ "$string1" == *"$substring"* ]]
then
   echo "The substring is present in string"
fi

输出

The substring is present in string

在这个例子中,我们在变量 string1 中存储了一个字符串“Hello World”,在变量 substring 中存储了一个子串“Hello”。我们使用 == 运算符和 * 通配符来检查子串是否出现在字符串中,如果出现,程序会在屏幕上打印“子串出现在字符串中”。

其他技术

除了上面提到的技术之外,还有一些其他的 Bash 字符串比较技术你可能会觉得有用。

正则表达式比较

当需要根据模式比较字符串时,使用正则表达式比较。例如:

示例

string1="hello world"
pattern="^hello.*$"
if [[ "$string1" =~ $pattern ]]
then
   echo "The string matches pattern"
fi

输出

The string matches pattern

在这个例子中,我们在变量 string1 中存储了一个字符串“hello world”,在变量 pattern 中存储了一个正则表达式模式“^hello.*$”。我们使用 =~ 运算符来检查字符串是否匹配模式,如果匹配,程序会在屏幕上打印“字符串匹配模式”。

长度比较

长度比较用于根据字符串的长度进行比较。例如:

示例

string1="hello"
string2="world"
if [ "${#string1}" -lt "${#string2}" ]
then
   echo "The first string is shorter than second string"
fi

在这个例子中,我们在变量 string1 和 string2 中存储了两个字符串“hello”和“world”。我们使用 ${#string} 参数扩展获取每个字符串的长度,然后使用 -lt 运算符检查第一个字符串是否短于第二个字符串。如果短于,程序会在屏幕上打印“第一个字符串短于第二个字符串”。

空值比较

空值比较用于比较变量是否已设置。例如:

string1=""
if [ -z "${string1+x}" ]
then
   echo "The variable is not set"
fi

在这个例子中,我们在变量 string1 中存储了一个空字符串。我们使用 ${string+x} 参数扩展来检查变量是否已设置,然后使用 -z 运算符来检查它是否未设置。如果未设置,程序会在屏幕上打印“变量未设置”。

Bash 字符串比较最佳实践

在使用 Bash 中的字符串比较时,您可以遵循一些最佳实践,以确保您的脚本可靠且高效。以下是一些您可以考虑的最佳实践:

使用双引号

在 Bash 中比较字符串时,必须将变量括在双引号中,以确保字符串被正确解释。例如:

string1="hello"
string2="world"
if [ "$string1" == "$string2" ]
then
   echo "The two strings are equal"
fi

在这个例子中,我们使用双引号将变量 string1 和 string2 括起来,确保字符串被正确解释。

使用 [[ ... ]] 而不是 [ ... ]

执行字符串比较时,建议使用 [[ ... ]] 条件表达式而不是 [ ... ] 测试命令。[[ ... ]] 表达式提供了额外的功能,例如模式匹配和正则表达式。例如:

示例

string1="hello world"
pattern="^hello.*$"
if [[ "$string1" =~ $pattern ]]
then
   echo "The string matches pattern"
fi

输出

The string matches pattern

在这个例子中,我们使用 [[ ... ]] 条件表达式将字符串与正则表达式模式进行比较。

结论

总而言之,Bash 字符串比较是每个开发人员都应该熟悉的核心概念。通过理解各种比较运算符和技术,您可以编写可靠且健壮的脚本,有效地处理字符串比较。当您继续使用 Bash 时,您会遇到需要字符串比较的不同场景,并且必须有创造力并找到处理每个场景的最佳方法。通过本文中获得的知识,您现在已经能够处理 Bash 中大多数字符串比较场景。

更新于:2023年4月12日

3K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告