codecamp

Bash 拆分字符串

在某些情况下,您可能需要先拆分字符串以进行您下一步的操作。由于在 Bash 中不包含类似其他编程语言中的split内置函数,所以需要参考以下几种方法来学习如何拆分字符串。

内部域分隔符

您可以使用$IFS在 Bash 中将字符串细分。

  • IFS被称为“内部域分隔符”,是一种 set 变量。
  • 当 bash shell 处理“命令替换”或“参数替换”时,会根据IFS的值来拆解读入的变量,然后对其进行处理。
  • IFS的默认值为空格符,也可使用\t\n等值作为分隔符设置给IFS

示例:

#!/bin/bash


read -p "Enter any string separated by space: " str  #读取字符串的值。


IFS=' ' #将空格设置为分隔符。
read -ra strArr <<<"$str" #将字符串读取到数组中,并由 IFS 分配分隔符。


for i in "${strArr[@]}"; #遍历访问数组中的每个元素。
do
echo "$i"
done

执行后得到以下结果:

Enter any string separated by space:welcome to W3Cschool
welcome
to
W3Cschool

readarray 命令

在不使用IFS的情况下,您可以使用 readarray命令加上-d选项对字符串进行分割。

示例:

#!/bin/bash


read -p "Enter any string separated by colon(:) " str #读取字符串的值,并将分隔符设置为 : 。


readarray -d : -t strArr <<<"$str" #根据设置的分隔符 : 来拆分字符串。


printf "\n"


#遍历打印输出数组中的每一个值
for (( n=0; n < ${#strArr[*]}; n++ ))
do
echo "${strArr[n]}"
done

执行后得到以下结果:

Enter any string separated by colon(:) welcome:to:W3Cschool


welcome
to
W3Cschool

Trim命令

您还可以使用tr命令来分割字符串。tr用于在原有定界符的基础上,对字符串进行拆分。

示例:

#!/bin/bash


str="welcome;to;W3Cschool!" #定界符 ;
arr=($(echo $str | tr ";" "\n"))#将定界符定义给 tr


for i in "${arr[@]}"
do
echo $i
done

执行后得到以下结果:

welcome
to
W3Cschool!
Bash 查找字符串长度
Bash 提取子字符串
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }