我将这个字符串存储在一个变量中:
IN="bla@some.com;john@home.com"
现在我想用;分隔符拆分字符串,这样我就有:
ADDR1="bla@some.com"ADDR2="john@home.com"
我不一定需要ADDR1和ADDR2变量。如果它们是数组的元素,那就更好了。
在下面的答案提出建议后,我最终得到了以下内容,这就是我所追求的:
#!/usr/bin/env bash
IN="bla@some.com;john@home.com"
mails=$(echo $IN | tr ";" "\n")
for addr in $mailsdoecho "> [$addr]"done
输出:
> [bla@some.com]> [john@home.com]
有一个解决方案涉及将Internal_field_separator(IFS)设置为;。我不确定那个答案发生了什么,你如何将IFS重置为默认值?
RE:IFS解决方案,我试过这个,它的工作原理,我保留旧的IFS,然后恢复它:
IN="bla@some.com;john@home.com"
OIFS=$IFSIFS=';'mails2=$INfor x in $mails2doecho "> [$x]"done
IFS=$OIFS
顺便说一句当我试着
mails2=($IN)
在循环打印时,我只得到了第一个字符串,没有括号$IN它可以工作。