在 BASH 脚本中比较字符串

image

原文连接:How to Compare Strings in Bash Shell Scripting

在这个教程里我们会学到如何在 Bash 脚本中进行字符串的比较,以及怎样检测字符串是否为空或者空串(null or empty)

处理字符串是任何语言都具备的功能,Bash 脚本也一样,甚至是语法都大致相同。

这里,我们展示一下如何在 Bash 脚本中比较字符串。

Bash 中的字符串比较

下面是如何比较两个字符串的例子:

if [ "$string1" == "$string2" ]

也可以直接使用字符串的字面量而不是使用变量:

if [ "$string1" == "This is my string" ]

让我们看几个常见的例子:

比较两个字符串是否相等

如果想比较两个字符串是否相等,可以参考下面这个例子:

#!/bin/bash

string1="MyString"
string2="MyString"

if [ "$string1" == "$string2" ]
then
    echo "Equal Stringis"
else
    echo "Strings not equal"
fi

注意字符间的间距
这里的方括号 [ 和变量之间以及变量和操作符 == 之间必须有空格,如果没有,将会看到类似:“unary operator expected” 或者 “missing ']'” 这样的错误。

在 Bash 中判断字符串不相等

作为替代,我们还可以使用相反的操作,即检查两个字符串是否不相等。Bash 也提供了不相等的比较操作,因此我们还可以在脚本中使用类似“如果不相等” 这样的条件:

if [ "$string1" != "Not MyString" ]

下面是一个完整的例子:

#!/bin/bash
string1="MyString"

if [ "$string1" != "Not MyString" ]
then
    echo "Not Equal Strings"
else
    echo "Stringis equal"
fi

在 Bash 中检测字符串是否是空值或者空串

和那些个与 C++ 类似的语言不同,在 Bash 脚本中还可以用一个命令来检测一个字符串是否是空值(null)或者空串(empty ""):

if [ -z "$VAR" ]

-z 实际上检查的是长度是否为 0,如果变量没有设置或者它是个空串(empty 就是 "")则长度为 0,因此条件判断的结果为 true

下面是一个完整的例子:

#!/bin/bash
string1=
string2=""
if [ -z "$string1" ]
then
    echo "Null Strings"
fi
if [ -z "$string2" ]
then
    echo "Empty Strings"
fi

Bash 脚本中的单方括号和双方括号

我们还可以在 if语句中使用双方括号:

if [[ "$string1" == "My  String" ]]

单个方括号是老版本的 POSIX 约定的写法,现在看起来它有一些毛病。如果我们没有使用双括号包围变量并且变量没有被定义,变量就会在代码中消失,最终导致执行脚本的结果是一个语法错误。

if [ $string1 == "My String" ]

在上面的代码中,如果变量 $string1 为空串或者没有定义,则这行代码等同于:

if [ == "My String" ]

总结

我希望我的这篇简短的教程可以帮助您学会在 Bash 脚本编程中如何比较字符串。同时我也推荐您读一下其他的快速教程 bash sleep command

如果您有任何问题或建议,欢迎您在评论区留言。

关于作者:

Abhishek

Abhishek (阿布舍克)
软件工程师,Linux 极客,开源狂热分子,经典|侦探|悬疑追剧人。人生终极目标是帮助人们使用 Linux。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,438评论 0 5
  • 最简单的例子 —— Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与 C 语言的异...
    Kandy阅读 968评论 0 0
  • BASH的基本语法 ·最简单的例子—— Hello World! ·关于输入、输出和错误输出 ·BASH中对变量的...
    约落小宫山阅读 1,230评论 0 13
  • 迷蒙遮望眼,春来倒又寒。 新意枝头冒,张灯结彩帘。 经年别乡路,归来情已远。 相逢竟不识,欲笑泪流先。
    用心是吉阅读 168评论 0 7
  • 控制单元从cs:ip中取出下一条指令,将此地址送上地址总线,cpu通过访问该地址得到了相应的指令,将该指令存放在指...
    今天不想掉头发阅读 491评论 0 0