Hallo *, folgendes Problem: Ich habe zwei (oder mehr) Variablen $WERT1 .. $WERTn Jetzt möchte ich gerne in einer Schleife über 1 .. n iterieren und mir die entsprechenden Variablen ausgeben lassen: for i in $(seq 1 $n) do echo $WERT...$i...hier fehlt es mir done Funktioniert das irgendwie auf diesem Wege oder muss ich das über arrays gemäß ${WERT[$n]} machen? Martin -- when in danger or in doubt, run in circles, scream and shout! pgp-key: via wwwkeys.de.pgp.net, key id is 0x21eec9b0
martin.borchert@gmx.de:
Ich habe zwei (oder mehr) Variablen $WERT1 .. $WERTn Jetzt möchte ich gerne in einer Schleife über 1 .. n iterieren und mir die entsprechenden Variablen ausgeben lassen:
for i in $(seq 1 $n) do echo $WERT...$i...hier fehlt es mir done
Funktioniert das irgendwie auf diesem Wege oder muss ich das über arrays gemäß ${WERT[$n]} machen?
Arrays gibt es nur in der bash, für andere BBourne-Shell gibt's das leider nicht. Wer also auch für nicht-GNU-Unixe programmiert kann folgendes nehmen: for i in $(seq 1 $n) do eval echo \${WERT$i} eval x=\${WERT$i} echo $x done PS: Man kann das natürlich auch für eine Zuweisung benutzen: eval WERT$i="foo-bar" Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 juergen@informatik-vollmer.de,vollmer@cocolab.de,Juergen.Vollmer@acm.org www.informatik-vollmer.de
* Martin Borchert schrieb am 22.Nov.2002:
Ich habe zwei (oder mehr) Variablen $WERT1 .. $WERTn Jetzt möchte ich gerne in einer Schleife über 1 .. n iterieren und mir die entsprechenden Variablen ausgeben lassen:
for i in $(seq 1 $n) do ^ Hier fehlt neue Zeile, oder ein Semikolon ;
echo $WERT...$i...hier fehlt es mir done
Funktioniert das irgendwie auf diesem Wege oder muss ich das über arrays gemäß ${WERT[$n]} machen?
eval echo '$WERT'$n eval erstetzt $n durch den Wert, $WERT aber nicht, da es in '..' steht, und das ganze wird dann nochmal evaluiert. Wichtig auch, daß kein Leerzeichen oder sowas zwichen '$WERT' und $n steht, weil es wirklich so genommen wird, wie es da steht. Allerdigns würd ich versuchen es irgendwie anders zu lösen. Etwa durch: for i in $WERT1 $WERT2 ... $WERTn do echo $i done Bernd -- Alle meine Signaturen sind rein zufällig und haben nichts mit dem Text oder dem Schreiber zu tun, dem ich antworte. Falls irgendwelche Unrichtigkeiten dabei sein sollten, so bedauere ich das. Es wäre nett, wenn Du mich benachrichtigen würdest. |Zufallssignatur 0
Am Freitag, 22. November 2002 21:58:21 schrieb Bernd Brodesser:
* Martin Borchert schrieb am 22.Nov.2002:
Ich habe zwei (oder mehr) Variablen $WERT1 .. $WERTn Jetzt möchte ich gerne in einer Schleife über 1 .. n iterieren und mir die entsprechenden Variablen ausgeben lassen: for i in $(seq 1 $n) do Hier fehlt neue Zeile, oder ein Semikolon ;
Waren doch mehrere Zeilen.
echo $WERT...$i...hier fehlt es mir done Funktioniert das irgendwie auf diesem Wege oder muss ich das über arrays gemäß ${WERT[$n]} machen? eval echo '$WERT'$n eval erstetzt $n durch den Wert, $WERT aber nicht, da es in '..' steht, und das ganze wird dann nochmal evaluiert. Wichtig auch, daß kein Leerzeichen oder sowas zwichen '$WERT' und $n steht, weil es wirklich so genommen wird, wie es da steht.
Okay, das funktioniert. Danke.
Allerdigns würd ich versuchen es irgendwie anders zu lösen. Etwa durch: for i in $WERT1 $WERT2 ... $WERTn do echo $i done
Okay, Problem dazu: 1. Warum würdest du das anders lösen wollen? 2. Wie würdest du das lösen, wenn $n unbekannt ist? Martin -- when in danger or in doubt, run in circles, scream and shout! pgp-key: via wwwkeys.de.pgp.net, key id is 0x21eec9b0
* Martin Borchert schrieb am 23.Nov.2002:
Am Freitag, 22. November 2002 21:58:21 schrieb Bernd Brodesser:
* Martin Borchert schrieb am 22.Nov.2002:
Ich habe zwei (oder mehr) Variablen $WERT1 .. $WERTn Jetzt möchte ich gerne in einer Schleife über 1 .. n iterieren und mir die entsprechenden Variablen ausgeben lassen: for i in $(seq 1 $n) do Hier fehlt neue Zeile, oder ein Semikolon ;
Waren doch mehrere Zeilen.
Nein, das do muß in einer neuen Zeile stehen, oder ein Semikolon davor, was auf das gleiche hinausläuft.
echo $WERT...$i...hier fehlt es mir done Funktioniert das irgendwie auf diesem Wege oder muss ich das über arrays gemäß ${WERT[$n]} machen? eval echo '$WERT'$n eval erstetzt $n durch den Wert, $WERT aber nicht, da es in '..' steht, und das ganze wird dann nochmal evaluiert. Wichtig auch, daß kein Leerzeichen oder sowas zwichen '$WERT' und $n steht, weil es wirklich so genommen wird, wie es da steht.
Okay, das funktioniert. Danke.
Allerdigns würd ich versuchen es irgendwie anders zu lösen. Etwa durch: for i in $WERT1 $WERT2 ... $WERTn do echo $i done
Okay, Problem dazu: 1. Warum würdest du das anders lösen wollen?
Weil das mit eval zimlich undurchsichtig ist.
2. Wie würdest du das lösen, wenn $n unbekannt ist?
Ich versuchte das irgendwie anders zu machen. Kann ich aber nicht sagen, wenn ich das Gesamtproblem nicht kenne. Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
Hallo, On Sat, 23 Nov 2002, Martin Borchert wrote:
Am Freitag, 22. November 2002 21:58:21 schrieb Bernd Brodesser:
* Martin Borchert schrieb am 22.Nov.2002:
Ich habe zwei (oder mehr) Variablen $WERT1 .. $WERTn Jetzt möchte ich gerne in einer Schleife über 1 .. n iterieren und mir die entsprechenden Variablen ausgeben lassen: for i in $(seq 1 $n) do Hier fehlt neue Zeile, oder ein Semikolon ;
Waren doch mehrere Zeilen.
Aber 'for ...' und 'do' standen auf einer Zeile. Und dann _fehlt_ das semikolon!
2. Wie würdest du das lösen, wenn $n unbekannt ist?
for i in `seq 1 "$n"`; do eval "echo \"\${WERT${i}}\""; done Man achte auf die Verschachtelung der '{}' und der '"'... Achso: Falls man statt `seq ..` z.B. Argumente verwenden will, dann bitte so: for i; do ...; done oder for i in "$@"; do ...; done Achso: RTFM: man bash, speziell: man -P 'less +"/^EXPANSION"' bash -dnh -- The only sensible way to estimate the stability of a Windows server is to power it down and try it out as a step ladder. - Robert Crawford, in the Monastery
participants (4)
-
B.Brodesser@t-online.de
-
David Haller
-
Jürgen Vollmer
-
Martin Borchert