Thread Bash: Frage zum Verhalten von 'read' (bash builtin) (3 answers)
Opened by Linuxer at 2013-06-10 18:59

Linuxer
 2013-06-10 18:59
#168081 #168081
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
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:
Code (sh): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#! /bin/bash

# currently testing: GNU bash, version 4.0.23(1)-release (i386-redhat-linux-gnu)

TEXT="Wort1 Wort2"

# Test 1: das hier klappt so leider nicht
echo "$TEXT" | read VAR1 VAR2
echo "TEXT: $TEXT"
echo "VAR1: $VAR1"
echo "VAR2: $VAR2"

# Test 2: aber das hier klappt; aber da gelten die Variablen nur innerhalb der while-Schleife
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!

View full thread Bash: Frage zum Verhalten von 'read' (bash builtin)