myfreax

Bash shell字符串比较

在编写Bash脚本时,您通常需要比较两个字符串以检查它们是否相等。当两个字符串长度相同且包含相同的字符时,它们是相等的

3 min read
By myfreax
Bash shell字符串比较

在编写Bash脚本时,您通常需要比较两个字符串以检查它们是否相等。当两个字符串长度相同且包含相同的字符时,它们是相等的。

在比较字符串时需要注意的是。二进制运算符和操作数之间必须使用空格。始终在变量名称周围使用双引号,以避免出现单词拆分或模糊问题。

Bash不会按类型分隔变量,bash会根据上下文将变量视为整数或字符串。

本教程描述了如何在Bash中比较字符串。比较运算符是比较值并返回true或false。在Bash中比较字符串时,可以使用以下表达式或者运算符。

string1 = string2string1 == string2如果字符串数相等,则等于运算符将返回true。string1 != string2如果字符串不相等,则不等式运算符将返回true。

在使用=运算符时你应该与[配合使用。使用==运算符时应该与[[配合使用,以进行模式匹配。

这是一个脚本,它接受用户的输入并比较指定的字符串。在此示例中,我们使用[[命令和==运算符。

#!/bin/bash

read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

您还可以使用逻辑和&&和或||比较字符串:

[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"

如果你需要检查字符串是否为空或者不为空时,你可以使用-z string表达式判断字符串是否长度为零,如果长度为零则返回true。

你可以使用-n string判断字符串长度是否不为零,如果长度为不为零则返回true。

以下时一个使用-z string表达式的示例,判断VAR字符串变量是否为0。

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "String is empty."
fi
String is empty.

如果你需要检查字符串是否包含子字符串,有多种检查字符串是否包含子字符串的方法。

一种方法是在子在字符串周围使用星号符号**是通配符意味着匹配所有字符。除了使用之外,另一个选择是使用正则表达式运算符=~

带有星号的句点.*匹配零个或多个出现的字符,除了换行符以外的任何字符。

#!/bin/bash

VAR='GNU/Linux is an operating system'
#if [[ $VAR =~ .*Linux.* ]]; then
if [[ $VAR == *"Linux"* ]]; then
  echo "It's there."
fi
It's there.

比较字符串是Bash脚本中最基本,最常用的操作之一。阅读本教程后,您应该对如何在Bash中比较字符串有很好的了解。您也可以查看有关字符串连接的指南。

如果您有任何问题或反馈,请随时发表评论。