如何在Bash脚本中拆分字符串
时间:2020-03-05 15:31:40 来源:igfitidea点击:
假设我们有一个长长的字符串,用逗号或者下划线分隔几个单词。
我们希望拆分此字符串并提取单个单词。
我们可以使用内部字段分隔符(ifs)和读取命令在Bash中拆分字符串,也可以使用TR命令。
让我向我们展示如何用例子来做。
方法1:使用Bash中的读命令拆分字符串
以下是使用读取命令拆分字符串的示例脚本:
#!/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在分隔符处拆分输入。
读取命令读取原始输入(选项-r),从而详细解释反斜杠,而不是将它们视为转义字符。
具有读取命令的选项-a将单词存储在Bash中的数组中。
更简单的单词,长字符串被分成几个由分隔符分隔的单词,这些单词存储在数组中。
现在,我们可以访问数组以获取我们想要的任何字,或者在Bash中使用for循环以将所有单词逐个打印,因为我在上面的脚本中完成了一个。
这是上面脚本的输出:
Ubuntu Linux Mint Debian Arch Fedora
方法2:使用BASH中的TR命令拆分字符串
这是使用tr(translate)命令的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
这个例子几乎与前一个相同。
tr命令而不是read命令用于拆分分隔符上的字符串。
这种方法的问题是阵列元素划分为"空间分隔符"。
因此,"Linux Mint"等元素将被视为两个单词。
这是上面脚本的输出:
Ubuntu Linux Mint Debian Arch Fedora
这就是为什么我更喜欢在Bash中拆分字符串的第一个方法的原因。