在Bash中使用长分隔符将字符串拆分为数组

3
在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>

为什么数组有这么多换行符?如果使用单个字符分隔符则可以正常工作。

1个回答

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接