【发布时间】:2020-05-08 22:06:21
【问题描述】:
在 OSX 的终端中使用 bash,此代码:
newtext="FIRST<br><br>SECOND<br><br>THIRD"
IFS='<br><br>' read -ra text_array <<< "$newtext"
printf "%s\n" "${text_array[@]}"
输出:
第一
第二
第三>
为什么数组有这么多换行元素?如果我使用单字符分隔符,它可以工作。
【问题讨论】:
在 OSX 的终端中使用 bash,此代码:
newtext="FIRST<br><br>SECOND<br><br>THIRD"
IFS='<br><br>' read -ra text_array <<< "$newtext"
printf "%s\n" "${text_array[@]}"
输出:
第一
第二
第三>
为什么数组有这么多换行元素?如果我使用单字符分隔符,它可以工作。
【问题讨论】:
IFS 只能在每个单个字符上拆分字符串,当您提供 <br><br> 时,它会拆分 <、b、r 和 > 上的输入。
您可以使用此解决方法来完成您的工作:
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}" 将 <br><br> 替换为控制字符 \5 IFS="$del" 在填充数组时拆分 \5 上的输入【讨论】: