使用长分隔符将字符串拆分为bash中的数组

fri*_*ffe 3 arrays macos bash ifs

在 OSX 上的终端中使用 bash,此代码:

newtext="FIRST<br><br>SECOND<br><br>THIRD" IFS='<br><br>' read -ra text_array <<< "$newtext" printf "%s\n" "${text_array[@]}"

输出:

FIRST







SECOND







第三>

为什么数组有这么多换行元素?如果我使用单字符分隔符,它会起作用。

anu*_*ava 5

IFS可在每个单字符的字符串分割仅当您提供<br><br>它拆分输入上<br>

您可以使用此变通方法来完成您的工作:

s="FIRST<br><br>SECOND<br><br>THIRD"
del=$'\5'   # our arbitrary delimiter; can be any other control character
IFS="$del" read -ra arr <<< "${s//<br><br>/$del}"
declare -p arr
Run Code Online (Sandbox Code Playgroud)

declare -a arr='([0]="FIRST" [1]="SECOND" [2]="THIRD")'
Run Code Online (Sandbox Code Playgroud)
  • del=$'\5'设置分隔符来控制字符\5\5只是一个任意字符,它可以替换为输入中不存在的任何其他字符。
  • "${s//<br><br>/$del}"替换<br><br>为控制字符\5
  • IFS="$del"\5在填充数组时拆分输入