Bash 比较字符串详细示例

系统 Linux
在本教程中,您将学习如何使用下面讨论的各种比较运算符来比较 bash 字符串。

与其他编程语言类似,bash 中的字符串是保存字符序列的数据类型。

在本教程中,您将学习如何使用下面讨论的各种比较运算符来比较 bash 字符串。

首先,让我们看一个创建和运行 bash 脚本的示例。

创建一个文件linuxmi.sh并在文件中写入以下代码。

#!/bin/bash
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 中的三个运算符中的任何一个来检查两个字符串是否相等。运算符有单等号、双等号和不等号运算符。示例代码如下所示。

#!/bin/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 中执行两个字符串的字典比较。按字典顺序,大写大于小写。在大小写相同的情况下,按照两个字符串的字母顺序进行比较。字符串之间的比较是从左到右进行的。看看下面的实际实现来理解这个概念。

#!/bin/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 运算符检查字符串是否为空。示例如下所示。

#!/bin/bash
# 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运算符用于类似的场景。

#!/bin/bash
# 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块被执行。

检查字符串是否包含子字符串

您可以使用正则表达式运算符 ,=~来检查字符串是否包含子字符串。运算符的左侧包含字符串,而右侧包含要检查的子字符串。一个简单的例子如下所示。

#!/bin/bash
# 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 字符串。

责任编辑:庞桂玉 来源: Linux公社
相关推荐

2023-01-09 09:52:06

Bash字符串

2022-11-25 07:53:26

bash脚本字符串

2021-03-08 08:23:24

Java字符串截取

2017-12-11 13:50:17

LinuxBash子字符串

2010-11-26 09:46:26

MySQL字符串相加

2009-11-30 14:08:42

PHP字符串原理

2022-12-06 08:27:50

Bash脚本字符串

2022-12-08 12:05:03

Bash字符串

2009-11-27 10:24:25

PHP字符串操作

2010-03-09 15:15:02

Python字符串类型

2009-02-24 14:27:55

2010-07-14 16:48:02

Perl字符串比较

2009-02-24 15:39:27

字符串比较函数函数

2010-03-22 17:53:50

Python字符Python字符串

2011-06-08 15:45:41

字符串JAVA

2010-11-26 10:22:28

MySQL字符串比较

2009-12-24 10:06:30

ADO.NET字符串

2012-01-11 09:15:45

Objective-C

2009-11-16 17:59:13

PHP数组转字符串

2009-09-02 15:53:27

C#判断字符串应用
点赞
收藏

51CTO技术栈公众号