我将这个字符串存储在一个变量中:
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
它可以工作。