如何在Bash中使用分隔符拆分字符串?

55 阅读1分钟

内容来自 DOC https://q.houxu6.top/?s=如何在Bash中使用分隔符拆分字符串?

我有一个字符串存储在变量中:

IN="bla@some.com;john@home.com"

现在我想通过 ; 分隔符拆分字符串,这样我就有:

ADDR1="bla@some.com"
ADDR2="john@home.com"

我并不一定需要 ADDR1ADDR2 变量。如果它们是数组的元素那就更好了。


在下面的回答建议下,我最终得到了我想要的:

#!/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 它就可以工作。