Wie spalte ich eine Zeichenfolge auf einem Trennzeichen in Bash?

Habe ich diesen string in einer Variablen gespeichert:

IN="[email protected];[email protected]"

Nun würde ich gerne splitten der strings durch ; Trennzeichen, so dass ich habe:

ADDR1="[email protected]"
ADDR2="[email protected]"

Brauche ich nicht unbedingt die ADDR1 und ADDR2 Variablen. Wenn Sie Elemente in einem array, ist das noch besser.


Nach Anregungen aus den Antworten unten, landete ich mit den folgenden das ist, was ich wurde nach:

#!/usr/bin/env bash

IN="[email protected];[email protected]"

mails=$(echo $IN | tr ";" "\n")

for addr in $mails
do
    echo "> [$addr]"
done

Ausgabe:

> [bla@some.com]
> [john@home.com]

Es wurde eine Lösung mit Einstellung Internal_field_separator (IFS);. Ich bin nicht sicher, was passiert mit ihm, wie setzen Sie IFS auf Standard zurück?

RE: IFS Lösung, ich versuchte dies und es funktioniert, ich halte die alten IFSund dann wieder:

IN="[email protected];[email protected]"

OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
    echo "> [$x]"
done

IFS=$OIFS

BTW, als ich versucht

mails2=($IN)

Habe ich nur die erste Zeichenfolge in der Ausgabe in der Schleife, ohne Klammern um $IN es funktioniert.

InformationsquelleAutor der Frage stefanB | 2009-05-28

Schreibe einen Kommentar