Bash 拆分字符串

2020-06-18 14:36 更新

在某些情況下,您可能需要先拆分字符串以進(jìn)行您下一步的操作。由于在 Bash 中不包含類似其他編程語言中的split內(nèi)置函數(shù),所以需要參考以下幾種方法來學(xué)習(xí)如何拆分字符串。

內(nèi)部域分隔符

您可以使用$IFS在 Bash 中將字符串細(xì)分。

  • IFS被稱為“內(nèi)部域分隔符”,是一種 set 變量。
  • 當(dāng) bash shell 處理“命令替換”或“參數(shù)替換”時(shí),會(huì)根據(jù)IFS的值來拆解讀入的變量,然后對(duì)其進(jìn)行處理。
  • IFS的默認(rèn)值為空格符,也可使用\t,\n等值作為分隔符設(shè)置給IFS。

示例:

#!/bin/bash


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


IFS=' ' #將空格設(shè)置為分隔符。
read -ra strArr <<<"$str" #將字符串讀取到數(shù)組中,并由 IFS 分配分隔符。


for i in "${strArr[@]}"; #遍歷訪問數(shù)組中的每個(gè)元素。
do
echo "$i"
done

執(zhí)行后得到以下結(jié)果:

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

readarray 命令

在不使用IFS的情況下,您可以使用 readarray命令加上-d選項(xiàng)對(duì)字符串進(jìn)行分割。

示例:

#!/bin/bash


read -p "Enter any string separated by colon(:) " str #讀取字符串的值,并將分隔符設(shè)置為 : 。


readarray -d : -t strArr <<<"$str" #根據(jù)設(shè)置的分隔符 : 來拆分字符串。


printf "\n"


#遍歷打印輸出數(shù)組中的每一個(gè)值
for (( n=0; n < ${#strArr[*]}; n++ ))
do
echo "${strArr[n]}"
done

執(zhí)行后得到以下結(jié)果:

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


welcome
to
W3Cschool

Trim命令

您還可以使用tr命令來分割字符串。tr用于在原有定界符的基礎(chǔ)上,對(duì)字符串進(jìn)行拆分。

示例:

#!/bin/bash


str="welcome;to;W3Cschool!" #定界符 ;
arr=($(echo $str | tr ";" "\n"))#將定界符定義給 tr


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

執(zhí)行后得到以下結(jié)果:

welcome
to
W3Cschool!
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)