我有一个字符串存储在变量中:
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 $mails
do
echo "> [$addr]"
done
输出:
> [bla@some.com]
> [john@home.com]
有一个解决方案涉及到设置 Internal_field_separator (IFS) 为 ;。我不确定那个答案发生了什么,如何将 IFS 重置为默认值?
关于 IFS 解决方案,我尝试了这个,它有效,我保留旧的 IFS 然后恢复它:
IN="bla@some.com;john@home.com"
OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
echo "> [$x]"
done
IFS=$OIFS
顺便说一下,当我尝试
mails2=($IN)
我只得到了第一个字符串,当在循环中打印它时,没有括号包围 $IN 它就可以工作。