Hallo,
ich bin etwas irritiert über das Verhalten von Bash-Builtin
read; vielleicht kann mir hier jemand Licht ins Dunkel bringen.
Grundlegend: Ich habe eine Variable mit einen String (bestehend aus zwei Worten mit Leerzeichen getrennt; z.B.
"Wort1 Wort2") enthält. Die zwei Worte brauche ich in zwei verschiedenen Variablen (
VAR1,
VAR2) innerhalb eines Skriptes; also soll
VAR1 dann
"Wort1" enthalten und
VAR2 analog
"Wort2".
Mein Gedanke war nun, diesen String an
read via STDIN zu liefern und
read sollte mir zwei Variablen mit den Inhalten füllen.
Aber auf direkte Weise tut es das nicht; ich kriege das nur innerhalb einer while-Schleife hin. Die while-Schleife bringt das Problem mit sich, dass die befüllten Variablen nur innerhalb der Schleife die gewünschten Werte enthalten (weil die while-Schleife in einer Sub-Shell läuft).
Leider erkenne ich im Moment nicht, warum der
read-Aufruf ohne Schleife so nicht funktioniert.
Als Beispielcode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
TEXT="Wort1 Wort2"
echo "$TEXT" | read VAR1 VAR2
echo "TEXT: $TEXT"
echo "VAR1: $VAR1"
echo "VAR2: $VAR2"
echo "$TEXT" | while read VAR1 VAR2 ; do
echo "TEXT: $TEXT"
echo "VAR1: $VAR1"
echo "VAR2: $VAR2"
done
Wenn das erste klappen würde, wäre es eine nette Variante, um mit einer Zeile mehrere Variablen mit den Daten aus der TEXT-Variable zu befüllen.
Kann mir jemand Tipps/Hinweise geben, warum der erste Versuch nicht funktioniert, aber der zweite schon?
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!