如何在 Bash 脚本中分割字符串
假设您有一个长字符串,其中的几个单词用逗号或下划线分隔。您想拆分此字符串并提取单个单词。
您可以使用内部字段分隔符 (IFS)和 read 命令在 bash 中拆分字符串,也可以使用 tr 命令。让我通过示例向您展示如何做到这一点。
方法 1:在 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 将单词 read 存储到bash 中的数组中。
简单来说,就是将长字符串分成几个单词,用分隔符分隔,然后将这些单词存储在一个数组中。
现在您可以访问数组来获取您想要的任何单词,或者使用 bash 中的 for 循环逐个打印所有单词,就像我在上面的脚本中所做的那样。
以下是上述脚本的输出:
Ubuntu
Linux Mint
Debian
Arch
Fedora
方法 2:在 Bash 中使用 tr 命令拆分字符串
这是使用 tr(翻译)命令的 bash 拆分字符串示例:
#!/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
此示例与上一个示例基本相同。这里不再使用 read 命令,而是使用 tr 命令根据分隔符来分割字符串。
这种方法的问题在于数组元素被“空格分隔符”分割。因此,像“Linux Mint”这样的元素将被视为两个单词。
以下是上述脚本的输出:
Ubuntu
Linux
Mint
Debian
Arch
Fedora
这就是我更喜欢使用第一种方法在 bash 中拆分字符串的原因。
我希望这个快速的 bash 教程能帮助您拆分字符串。在相关文章中,您可能还想阅读有关bash 中的字符串比较的内容。
如果您是 Bash 新手,请阅读我们的Bash 初学者教程系列。