bash分割字符串spit

本文概述

  • 使用$ IFS变量拆分
  • 不带$ IFS变量的拆分
  • 结论
在本主题中,我们定义了如何在bash shell脚本中拆分字符串。
在某些情况下,我们可能需要拆分字符串数据以执行某些特定任务。大多数编程语言都包含内置功能“ 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上欢迎你”,则输出将如下所示:
bash分割字符串spit

文章图片
示例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]}"

输出量
bash分割字符串spit

文章图片
不带$ 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

输出量
bash分割字符串spit

文章图片
示例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。
  • $ {参数
输出量
bash分割字符串spit

文章图片
示例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

输出量
bash分割字符串spit

文章图片
注意:应注意,如果我们应用trim命令分割字符串,则数组元素将在’ space delimiter’ 上分割。例如,像“ Windows OS”这样的元素将被视为两个不同的词。结论在本主题中,我们演示了如何在bash脚本中使用不同类型的方案(或不使用定界符)拆分字符串。

    推荐阅读