PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen mehrfach ansprechen ?



r00ki3
12.07.2005, 09:27
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

Schlaubi_fi.de
12.07.2005, 12:34
Hää wie meinst du das??



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:



huhu1 huhu2 huhu3
huhu4 huhu5 huhu6


also wo ist das Problem? :think:

r00ki3
12.07.2005, 13:58
#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

tr0nix
12.07.2005, 15:10
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:

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...).