在 Linux 中检查字符串是否包含子字符串
简介
在 Linux 中处理字符串可能有点棘手,但只要使用合适的工具,就会变得轻而易举。许多 Linux 用户经常会检查字符串是否包含特定的子字符串。这可以使用多种方法来完成,包括正则表达式、字符串操作命令以及像 Python 或 Perl 这样的编程语言。然而,在本文中,我们将探讨一种在 Linux 中检查字符串是否包含子字符串的最流行且最有效的方法,即使用特殊的 Shell 变量 IFS(内部字段分隔符)。我们将讨论 IFS 变量的默认值,了解它们的各种用例,并探索一些在 IFS 中设置自定义值的实现。
IFS 变量及其默认值
特殊 Shell 变量 IFS 决定了 Bash 在拆分字符串序列时如何识别单词边界。IFS 默认为由空格、制表符和换行符组成的三个字符的字符串。可以使用以下命令进行检查 -
$ echo "$IFS" | cat -et
此命令的输出为 -
^I$
"^I" 表示制表符停止位,$ 表示换行符。这意味着,默认情况下,Bash 将基于空格、制表符和换行符拆分字符串。例如,如果我们有一个字符串"foo bar foobar",并且我们想检查它是否包含子字符串"bar",我们可以使用以下命令 -
string="foo bar foobar" for i in $string do echo "'$i' is the substring" done
此命令的输出将是 −
'foo' is the substring 'bar' is the substring 'foobar' is the substring
这表明 IFS 变量的默认空格值用于将输入字符串拆分为单独的子字符串。
IFS 与单词拆分
IFS 变量在单词拆分中起着至关重要的作用,单词拆分是根据 IFS 变量的值将字符串拆分为单独的单词的过程。IFS 变量的默认空格、制表符和换行符值使得基于这些字符拆分字符串变得容易。但是,我们也可以在 IFS 变量中设置自定义值,以便基于其他字符拆分字符串。
在 IFS 中设置自定义值
除了使用默认的 IFS 值外,我们还可以在 IFS 变量中设置自定义值。这有助于我们处理多个字段分隔的字符串。例如,如果我们有一个字符串"foo:bar:foobar"并且我们想检查它是否包含子字符串"bar",我们可以使用以下命令 -
string="foo:bar:foobar" old_ifs="$IFS" IFS=":" for i in $string do echo "'$i' is the splitted word" done IFS="$old_ifs"
此命令的输出将是 −
'foo' is the splitted word 'bar' is the splitted word 'foobar' is the splitted word
这表明,通过将":"的自定义值设置为 IFS,我们能够根据":"分隔符将输入字符串拆分为单独的子字符串。
IFS 和子字符串检查
通过理解 IFS 的行为并在其中设置自定义值,我们可以检查字符串是否包含特定的子字符串。我们可以对输入字符串使用 for 循环,检查当前子字符串是否等于目标子字符串。如果相等,我们就知道目标子字符串存在于输入字符串中。
例如,假设您有一个字符串 "Hello world",并且您想检查它是否包含子字符串"World"。我们可以使用以下命令 -
string="Hello World"
IFS=" "
for i in $string
do
if [ $i == "World" ]; then
echo "The substring 'World' is present in the string 'Hello World'."
fi
done
此命令迭代输入字符串,根据空格分隔符将其拆分为单独的子字符串,并检查当前子字符串是否等于目标子字符串"World"。如果是,则打印该子字符串存在于输入字符串中的消息。禁用IFS -
另一个需要考虑的重要事项是,我们也可以禁用IFS来恢复Bash的默认行为。例如,如果我们有一个字符串"foo bar foo:bar",并且我们将IFS变量设置为":",我们可以禁用IFS将其重置为默认值,并使用空格、制表符和换行符拆分输入字符串。
string="foo bar foo:bar" IFS=":" for i in $string; do echo "[$i] extracted"; done unset IFS for i in $string; do echo "[$i] extracted"; done
第一个 for 循环将根据":"分隔符提取子字符串,而第二个 for 循环在禁用 IFS 后,将根据默认分隔符(空格、制表符 和 换行符)提取子字符串。
结论
在本文中,我们探讨了 IFS 变量、其默认值以及如何在 IFS 中设置自定义值以检查字符串是否包含子字符串。IFS 变量是用于文本处理和模式匹配的强大工具。通过了解其行为,我们可以使用它来检查字符串是否包含特定的子字符串,这在许多 Linux 操作中都非常有用。请记住,在执行此操作之前,务必先测试您的命令。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

