假设您有一个长字符串,其中包含几个用逗号或下划线分隔的单词。 您想要拆分此字符串并提取单个单词。
您可以将字符串拆分为 bash 使用 内部场分离器 (IFS) 并读取命令,或者您可以使用 tr 命令。 让我通过示例向您展示如何做到这一点。
方法一:在 Bash 中使用 read 命令分割字符串
这是我使用读取命令拆分字符串的示例脚本:
#!/bin/bash
#
# Script to split a string based on the delimiter
my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"
IFS=';' read -ra my_array <<< "$my_string"
#Print the split string
for i in "${my_array[@]}"
do
echo $i
done
拆分字符串的部分在这里:
IFS=';' read -ra my_array <<< "$my_string"
让我给你解释一下。 IFS 确定要分割字符串的分隔符。 就我而言,它是一个半冒号。 它可以是任何你想要的东西,比如空格、制表符、逗号,甚至是一个字母。
read 命令中的 IFS 在分隔符处拆分输入。 read 命令读取原始输入(选项 -r),因此按字面意思解释反斜杠,而不是将它们视为转义字符。 带有 read 命令的选项 -a 将读取的单词存储到一个数组中 bash.
用更简单的话来说,长字符串被分成几个由分隔符分隔的单词,这些单词存储在一个数组中。
现在您可以访问数组以获取您想要的任何单词或使用 for 循环 bash 像我在上面的脚本中所做的那样一一打印所有单词。
这是上述脚本的输出:
Ubuntu
Linux Mint
Debian
Arch
Fedora
方法 2:在 Bash 中使用 tr 命令拆分字符串
这是 bash 拆分字符串 example 使用 tr (翻译)命令:
#!/bin/bash
#
# Script to split a string based on the delimiter
my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"
my_array=($(echo $my_string | tr ";" "n"))
#Print the split string
for i in "${my_array[@]}"
do
echo $i
done
这 example 与上一个几乎相同。 tr 命令用于在分隔符上分割字符串,而不是 read 命令。
这种方法的问题是数组元素在“空格分隔符”上划分。 因此,像“Linux Mint”这样的元素将被视为两个词。
这是上述脚本的输出:
Ubuntu
Linux
Mint
Debian
Arch
Fedora
这就是为什么我更喜欢第一种方法来分割字符串的原因 bash.
我希望这快 bash 教程帮助您拆分字符串。 在相关文章中,您可能还想阅读关于字符串比较的内容 bash.
如果您对 Bash 完全陌生,请阅读我们的 Bash 初学者教程系列。