在 BASH 脚本中比较字符串
原文连接: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
如果您有任何问题或建议,欢迎您在评论区留言。
关于作者:
AbhishekAbhishek (阿布舍克)
软件工程师,Linux 极客,开源狂热分子,经典|侦探|悬疑追剧人。人生终极目标是帮助人们使用 Linux。