社区编辑申请
注册/登录
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公社
相关推荐

2022-04-02 20:45:04

Hi3516开发板操作系统鸿蒙

2022-04-15 14:31:02

鸿蒙操作系统

2022-05-09 07:08:14

LinuxBashShell

2022-03-30 09:32:32

BashtestLinux

2022-05-12 23:38:19

SQL数据库字符串

2022-04-04 16:53:56

2022-04-12 11:20:11

C 语言Linux编程

2022-05-12 13:40:18

勒索软件数据泄露网络安全

2022-04-02 10:45:17

PythonShell命令

2022-03-11 10:53:32

UML建模语言

2022-04-13 08:00:00

Hilla开发Java

2022-04-25 09:10:50

RK3568鸿蒙

2022-04-27 09:48:56

JS前端开发

2022-04-07 12:18:55

物联网设备物联网IOT

2022-03-29 09:33:34

LinuxShell命令

2022-03-22 11:33:13

AT模块Harmony鸿蒙

2022-04-04 10:28:49

C#项目WPF

2022-04-25 11:26:16

开发SpringBoot

2022-03-21 09:52:44

LinuxSystemd日志

2022-04-06 08:29:26

Kafka通信中间件

同话题下的热门内容

除 Windows 11 外,微软刚发布的 KB5013942 也同样会导致 Windows 10 出错NVIDIA 终于发布开源 Linux GPU 内核模块为何 NVidia 的开源驱动程序对 Linux 如此重要?微软发布 Windows 11 Dev 预览版 25120:带来全新交互式桌面内容,支持 ARM64 设备Fedora 36 通过桌面大修吸引开发者,但它能取悦 Linux 之父吗?万字多图,搞懂 Nginx 高性能网络工作原理!80%的 Linux 使用者都不懂的内存问题Ubuntu 22.04 中安装最新 Wine 以运行 Windows 应用程序

编辑推荐

你应该知道的八款国产操作系统为什么你可能想要略过Ubuntu 17.04?HarmonyOS 2.0鸿蒙第二期开发者Beta公测申请指南让后端开发情何以堪?前端程序猿薪资大曝光谷歌“断供”华为!中国真写不出操作系统?
我收藏的内容
点赞
收藏

51CTO技术栈公众号

网站地图 申博太阳城直营网 申博游戏手机下载 申博开户 申博游戏平台
申博娱乐微信号 申博开户 申博开户官网登入 太阳城代理
申博娱乐开户 现金网百家乐 申博代理 申博开户
申博会员登入 申博百家乐 申博游戏平台 澳门银河赌场
申博登入网址 百家乐真人游戏 太阳城登入 申博官网