本文概述
- 使用$ IFS变量拆分
- 不带$ IFS变量的拆分
- 结论
在某些情况下,我们可能需要拆分字符串数据以执行某些特定任务。大多数编程语言都包含内置功能“ split”,可将任何字符串数据分为多个部分。但是,bash不包含此类内置函数。但是我们可以使用分隔符在bash脚本中拆分任何字符串数据。分隔符可以是单个字符,也可以是包含多个字符的字符串。
查看以下方法,了解如何在bash shell中分割字符串:
使用$ IFS变量拆分以下是使用$ IFS在bash中拆分字符串的步骤:
- $ IFS是一个特殊的内部变量,用于将字符串拆分为单词。 $ IFS变量称为“内部字段分隔符”,它确定Bash如何识别边界。 $ IFS用于分配用于分隔字符串的特定定界符[IFS =” ]。空格是$ IFS的默认值。但是,我们也可以使用’ \ t’ ,’ \ n’ ,’ -‘ 等值作为分隔符。
- 分配定界符后,可以通过两个选项读取字符串:“-r”和“ -a”。即,读取-ra ARR < < < “ $ str”。在这里,选项“ -r”用于定义反斜杠(\)是字符而不是转义字符。 ‘ -a’ 选项用于定义将单词(用$ IFS分隔)分配给从零开始的数组顺序索引。
- 然后,我们应用bash’ for’ 循环来访问令牌,这些令牌被拆分为一个数组。
示例1:Bash按空格分割字符串
在此示例中,使用空格字符定界符分割字符串。
Bash脚本
#!/bin/bash
#Example for bash split string by spaceread -p "Enter any string separated by space: " str#reading string valueIFS='' #setting space as delimiter
read -ra ADDR <
<
<
"$str" #reading str as an array as tokens separated by IFSfor i in "${ADDR[@]}";
#accessing each element of array
do
echo "$i"
done
输出量
如果输入字符串“ srcmini上欢迎你”,则输出将如下所示:
文章图片
示例2:Bash按符号分割字符串
在某些情况下,我们可能需要用其他定界符(例如符号或特定字符)来分割字符串。在本示例中,使用逗号(,)符号字符作为分隔符来分割字符串。
Bash脚本
#!/bin/bash
#Example for bash split string by Symbol (comma)read -p "Enter Name, State and Age separated by a comma: " entry #reading string valueIFS=', ' #setting comma as delimiter
read -a strarr <
<
<
"$entry" #reading str as an array as tokens separated by IFSecho "Name : ${strarr[0]} "
echo "State : ${strarr[1]} "
echo "Age : ${strarr[2]}"
输出量
文章图片
不带$ IFS变量的拆分在bash中,也可以在不使用$ IFS变量的情况下分割字符串。带-d选项的’ readarray’ 命令用于拆分字符串数据。 -d选项用于在命令中定义分隔符,例如$ IFS。此外,bash循环用于以拆分形式打印字符串。
【bash分割字符串spit】让我们借助一些示例来了解此逻辑:
示例1:Bash按符号分割字符串
本示例定义了如何在不使用$ IFS的情况下拆分字符串值。根据脚本,应使用冒号(:)输入文本值,以便将其拆分。查看下面的bash脚本:
Bash脚本
#!/bin/bash
#Example for bash split string without $IFSread -p "Enter any string separated by colon(:) " str #reading string valuereadarray -d : -t strarr <
<
<
"$str" #split a string based on the delimiter ':'printf "\n"#Print each value of Array with the help of loop
for (( n=0;
n <
${#strarr[*]};
n++ ))
do
echo "${strarr[n]}"
done
输出量
文章图片
示例2:用另一个字符串重击拆分字符串
在此示例中,我们使用了惯用表达式,其中参数扩展已完成。
Bash脚本
#!/bin/bash
#Example for bash split string by another stringstr="WeLearnWelcomeLearnYouLearnOnLearnsrcmini"
delimiter=Learn
s=$str$delimiter
array=();
while [[ $s ]];
do
array+=( "${s%%"$delimiter"*}" );
s=${s#*"$delimiter"};
done;
declare -p array
在此bash脚本中,我们使用了以下Parameter- Expansions:
- $ {parameter %% word}%20It%20删除了%20the%20longest%20matching%20suffix%20pattern。
- $ {参数
文章图片
示例3:使用Trim命令进行Bash拆分字符串
在此示例中,我们使用trim(tr)命令分割字符串。 trim命令不是使用read命令,而是用于在定界符上拆分字符串。
Bash脚本
#!/bin/bash
#Example to split a string using trim (tr) commandmy_str="We;
welcome;
you;
on;
srcmini."
my_arr=($(echo $my_str | tr ";
""\n"))for i in "${my_arr[@]}"
do
echo $i
done
输出量
文章图片
注意:应注意,如果我们应用trim命令分割字符串,则数组元素将在’ space delimiter’ 上分割。例如,像“ Windows OS”这样的元素将被视为两个不同的词。结论在本主题中,我们演示了如何在bash脚本中使用不同类型的方案(或不使用定界符)拆分字符串。