Variablen mehrfach ansprechen ?

R

r00ki3

Jungspund
Hallo ihrs,

kann ich eigentlich eine Variable innerhalb eines Skripts mehrfach setzen ?
Ich habe folgendes gemacht:

#schleife 1
cat file | while
read key extern intern
[ do stuff with $]; done

#schleife 2
cat file | while
read key extern intern
[ do stuff with $]; done

Nun ist es so, daß innerhalb der zweiten Schleife die $key $intern $extern nicht ausgelesen werden ( mittels echo $var überprüft ). Liegt es daran, daß diese schon einmal verwendet wurden oder so ? Ich habe die Steuerdatei mal mit anderen Variablennamen lesen lassen, funzt auch nicht.

Bestimmt klassischer Anfänger - lapsus :-)

Daniel
 
Hää wie meinst du das??

Code:
echo huhu1 huhu2 huhu3 | while read key extern intern; do
    echo $key $extern $intern;
done

echo huhu4 huhu5 huhu6 | while read key extern intern; do
    echo $key $extern $intern;
done

und die Ausgabe ist:

Code:
huhu1 huhu2 huhu3
huhu4 huhu5 huhu6

also wo ist das Problem? :think:
 
#Schleife A

cat /usr/bin/paycipher/key.id | while
read key extern intern
do
for up in `find /usr/bin/paycipher/$key -follow -mindepth 3 -mmin +1 -iname "*.*"`
do ......stuff ....done.


--> Die Variablen werden korrekt gefunden und sind lesbar mit echo $var.


#Schleife B

cat /usr/bin/paycipher/key.id | while
read key extern intern
do
....stuff....

echo "Steuersatz:" $key
echo "Gefunden: "$up

Beide Schleifen befinden sich im selben Skript.
Die variablen sind ab Schleife B nicht / mehr lesbar, es werden leere Strings ausgegeben. Demzufolge kann ich deren Werte nicht als Argumente an andere
Programmaufrufe im Skript weitergeben.



Ideas ?

Daniel
 
Klar.. Schleife B ist ja ausserhalb der Schleife A. Wenn ich es recht verstanden habe, setzt du $key ja mehrmals neu (bei jedem Durchgang). Wenn die Schleife also beendet ist, ist $key entweder noch vom letzten Durchlauf gesetzt oder leer (bin mir da nicht sicher).

Mit der Schleife B könntest du also maximal auf das letzte gefundene Element der Schleife A zugreifen wenn die Shell nach dem while diese Variablen überhaupt rausgibt.

Was du tun kannst ist sowas:
Code:
export counter=0
cat file | while
read key extern intern
safekey[$counter]=$key
counter=`expr $counter + 1`
[ do stuff with $]; done

Es gibt eine schönere Art, eine Variable zu Inkrementieren in der Bash.. aber so ist mehr oder weniger allgemeingültig. Dasselbe machst du auch beim Zugreifen! Einfach mit ${array[nr]} (GLAUBS! lange nicht mehr gemacht...).
 

Ähnliche Themen

Sed: Bestimmtes Feld einer "Zeile mit mehreren Feldern" ergänzen

dovecot und postfix Konfiguration Problem

Last mit etc/passwd anzeigen lassen

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

MySQL-Abfrage an Variable übergeben

Zurück
Oben