使用长分隔符将字符串拆分为 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>
时,它会在 <
、b
、r
上拆分输入和 >
.
您可以使用此解决方法来完成您的工作:
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"
在填充数组 时拆分
上的输入
在 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>
时,它会在 <
、b
、r
上拆分输入和 >
.
您可以使用此解决方法来完成您的工作:
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"
在填充数组 时拆分
上的输入