我将此字符串存储在变量中:
IN="[email protected] /cdn-cgi/l/email-protection;[email protected] /cdn-cgi/l/email-protection"
现在我想将字符串拆分为;
分隔符,这样我就有:
ADDR1="[email protected] /cdn-cgi/l/email-protection"
ADDR2="[email protected] /cdn-cgi/l/email-protection"
我不一定需要ADDR1
and ADDR2
变量。如果它们是数组的元素那就更好了。
根据以下答案的建议,我最终得到了以下结果,这就是我所追求的:
#!/usr/bin/env bash
IN="[email protected] /cdn-cgi/l/email-protection;[email protected] /cdn-cgi/l/email-protection"
mails=$(echo $IN | tr ";" "\n")
for addr in $mails
do
echo "> [$addr]"
done
Output:
> [[email protected] /cdn-cgi/l/email-protection]
> [[email protected] /cdn-cgi/l/email-protection]
有一个解决方案涉及设置内部字段分隔符 http://en.wikipedia.org/wiki/Internal_field_separator(IFS) 至;
。我不确定这个答案发生了什么,你如何重置IFS
回到默认状态?
RE: IFS
解决方案,我尝试了这个,它有效,我保留旧的IFS
然后恢复它:
IN="[email protected] /cdn-cgi/l/email-protection;[email protected] /cdn-cgi/l/email-protection"
OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
echo "> [$x]"
done
IFS=$OIFS
顺便说一句,当我尝试时
mails2=($IN)
我在循环打印时只得到第一个字符串,周围没有括号$IN
有用。