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

Splitting string to array in bash with long delimiter

在 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







THIRD>

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

IFS 只能在每个单个字符上拆分字符串,当您提供 <br><br> 时,它会在 <br 上拆分输入和 >.

您可以使用此解决方法来完成您的工作:

s="FIRST<br><br>SECOND<br><br>THIRD"
del=$''   # our arbitrary delimiter; can be any other control character
IFS="$del" read -ra arr <<< "${s//<br><br>/$del}"
declare -p arr

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