Hallo Leute,
ich habe ein kleines Problem mit der Shell-Programmierung. Und zwar moechte ich die Namen von Umgebungsvariablen mit einer Schleife berechnen lassen.
Folgendes Beispiel:
<schnipp> #!/bin/sh
i=0 j=0
while [ "$#" != "0" ] do let i="i+1" export TempVar$i=$1 echo $i shift done
while [ "$j" != "$i" ] do let j="j+1" #----------- Temp=$TempVar$j #----------- echo $j $i $Temp done </schnapp>
In der ersten while-Schleife werden die dem Script uebergebenen Argumente der Reihe nach in Umgebungsvariablen mit den Namen TempVarXX zugewiesen, wobei XX eine aufsteigende Zahl (aus i) ist.
Nun will ich ueber eine Weitere Schleife die Inhalte dieser Variablen ausgeben, erhalte aber auch nach vielen Versuchen mit Klammern etc. nicht das gewuenschte Ergebnis. Der springende Punkt liegt zwischen den beiden "---" -Kommentaren, ich hab auch schon mit eval experimentiert, das scheint aber nicht dafuer geeignet zu sein.
Ich wuerde mich ueber einen Hinweis sehr freuen,
Viele Gruesse,
Matthias
Hi Matthias,
On Wed, Nov 14, 2001 at 12:09:14 +0100, Matthias Petermann wrote:
ich habe ein kleines Problem mit der Shell-Programmierung. Und zwar moechte ich die Namen von Umgebungsvariablen mit einer Schleife berechnen lassen.
#!/bin/sh i=0 j=0 while [ "$#" != "0" ] do let i="i+1" export TempVar$i=$1 echo $i shift done while [ "$j" != "$i" ] do let j="j+1" eval Temp=$TempVar$j <-- die Zeile ist der Knackpunkt echo $j $i $Temp done
Der Ausdruck, der hinter eval steht, wird erstmal expandiert, d.h. $j wird durch den Wert von j ersetzt. Das $ vor Temp soll stehenbleiben und wird daher mit \ escaped. Dann wird die expandierte Zeile mit eval als Shellkommando ausgefuehrt.
bye, Chris
Vielen Dank Christian,
Nun funktioniert es prima :-)
Gruß, Matthias
On Wed, Nov 14, 2001 at 02:12:53PM +0100, Christian Perle wrote:
Der Ausdruck, der hinter eval steht, wird erstmal expandiert, d.h. $j wird durch den Wert von j ersetzt. Das $ vor Temp soll stehenbleiben und wird daher mit \ escaped. Dann wird die expandierte Zeile mit eval als Shellkommando ausgefuehrt.
lug-dd@mailman.schlittermann.de