Эта строка хранится в переменной:
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
назад по умолчанию?
RE: 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
это работает.