在Bash中使用字符串时,最常见的操作之一是确定一个字符串是否包含另一个字符串。
分别是使用通配符检查是否包含字符串。使用case运算符,使用正则表达式匹配字符串,使用Grep匹配字符串。
最简单的方法就是在子字符串使用星号*
围绕,并与输入的字符串比较。*
通配符是用于表示零个,一个或多个字符的正则表达式。
另一个选择是使用运算符=~
并与正则表达式.*
搭配使用。.*
带有星号的句点表示匹配零个或多个字符,除了换行符以外的任何字符。
在下面的示例中,我们使用if语句和相等运算符检查是否在STR
字符串中找到了子字符串SUB
:
#!/bin/bash
STR='GNU/Linux is an operating system'
SUB='Linux'
#if [[ $VAR =~ .*Linux.* ]]; then
if [[ "$STR" == *"$SUB"* ]]; then
echo "It's there."
fi
grep通常用于搜索文件,grep也可读取标准输入,因此你也可以使用grep检查字符串是否包含你指定的字符串。
在使用grep时你应该使用-q
选项让grep以忽略标准输出。如果测试返回true
,则在字符串中包含子字符串。
在以下示例中,我们将字符串$STR
作为输入并传递给grep,检查是否在输入字符串中找到$SUB
字符串。
#!/bin/bash
STR='GNU/Linux is an operating system'
SUB='Linux'
if grep -q "$SUB" <<< "$STR"; then
echo "It's there"
fi
检查字符串是否包含子字符串是Bash脚本中最基本且最常用的操作之一。阅读本教程后,您应该对如何测试一个字符串是否包含另一个字符串有很好的了解。
您也可以使用其他命令,例如awk
或sed
进行测试。如果您有任何问题或反馈,请随时发表评论。