Hallo, ich versuch eine simple Rechung aber irgendwie klappt's nicht ganz. Weis jemand warum der Fehler kommt? Michael :-) LEVEL=2 echo $LEVEL $[LEVEL+=1] echo $LEVEL :/tmp # edate 2 ./edate: 3: command not found 3 :/tmp # edate
On Don, 30 Aug 2001, Michael Hoeller wrote:
ich versuch eine simple Rechung aber irgendwie klappt's nicht ganz. Weis jemand warum der Fehler kommt?
LEVEL=2 echo $LEVEL $[LEVEL+=1] echo $LEVEL
:/tmp # edate 2 ./edate: 3: command not found 3
Das Konstrukt $[] und $(( )) ist kein Befehl, sondern wir wird expandiert, _bevor_ die Zeile ausgefuehrt wird. Nun ist ja das Ergebnis der Expandierung == 3, d.h. die bash versucht nun das Ergebnis der Expandierung auszufuehren, denn sonst wuerde ja z.B. ein: echo $[LEVEL+=1] nicht 3 sondern eine leere Zeile ergeben. Loesung: LEVEL=2 echo $LEVEL echo $[LEVEL+=1] oder du verwendest den "leeren" Befehl ':' LEVEL=2 echo $LEVEL : $[LEVEL +=1] echo $LEVEL Weiters kannst du natuerlich auch eine andere Schreibweise verwenden: LEVEL=2 echo $LEVEL LEVEL=$[LEVEL+1] echo $LEVEL Das gilt uebrigens genauso fuer alle anderen Expandierungen, insbesondere den vielen ${} Varianten. -dnh -- ... just what are we going to say to an alien race if we make contact? "Do you have Napster?" "Can we borrow one of your rainforests?" "Stop making crop circles!" -- Scott Barber, in rasfw
* Michael Hoeller schrieb am 30.08.01 um 20:55 Uhr:
Hallo,
ich versuch eine simple Rechung aber irgendwie klappt's nicht ganz. Weis jemand warum der Fehler kommt?
Michael :-)
LEVEL=2 echo $LEVEL $[LEVEL+=1] echo $LEVEL
:/tmp # edate 2 ./edate: 3: command not found 3 :/tmp # edate
Hi Michael, probier mal let LEVEL=$LEVEL+1 Gruss -Marc -- +------------------------------------------------------------------+ | --> http://www.links2linux.de <-- Jetzt mit neuen Features! | | wie z.B. [EasyLink] | +---Registered-Linux-User-#136487------------http://counter.li.org +
* Michael Hoeller schrieb am 30.Aug.2001:
ich versuch eine simple Rechung aber irgendwie klappt's nicht ganz. Weis jemand warum der Fehler kommt?
LEVEL=2 echo $LEVEL $[LEVEL+=1] echo $LEVEL
:/tmp # edate 2 ./edate: 3: command not found 3 :/tmp # edate
Klappt doch, aber Du nimmst das Ergebnis als Befehl, und damit kann die bash nichts anfangen. Setze vor $[LEVEL+=1] ein let und gut ist. Allerdings ist die bash zum rechnen nicht besonders gut geeignet und vor allem ist das denn nicht mehr kompatibel. Bernd -- Umsteiger von Microsoft Windows xx? Hast Du schon file://usr/doc/howto/de/DE-DOS-nach-Linux-HOWTO.txt gelesen? Auch file://usr/doc/Books/Linuxhandbuch.dvi ist zu empfehlen. |Zufallssignatur 1
On Fri, 31 Aug 2001, Bernd Brodesser wrote:
* Michael Hoeller schrieb am 30.Aug.2001:
LEVEL=2 echo $LEVEL $[LEVEL+=1] echo $LEVEL
:/tmp # edate 2 ./edate: 3: command not found 3 :/tmp # edate
Klappt doch, aber Du nimmst das Ergebnis als Befehl, und damit kann die bash nichts anfangen. Setze vor $[LEVEL+=1] ein let und gut ist.
ACK.
Allerdings ist die bash zum rechnen nicht besonders gut geeignet und vor allem ist das denn nicht mehr kompatibel.
Und deshalb ist mir immer wieder mein kleiner "bc" lieb und teuer. Michael, probiere doch mal: echo pi=$(echo "scale=10; 4*a(1)" | bc -l) echo $pi und lasse Dich ein bisschen von diesem nuetzlichen Tool "bc" begeistern. Und fuer Leute, die auch Manuals lesen: Das Beispiel habe ich dort herausgeklaut. Gruss Peter Blancke -- Nachtwaechter ist der Wahnsinn, weil er wacht...
On Fri, 31 Aug 2001, Peter Blancke wrote:
Michael, probiere doch mal:
echo pi=$(echo "scale=10; 4*a(1)" | bc -l) echo $pi
Na, mal eine Selbstkorrektur: Das _erste_ "echo" in der _ersten_ Zeile kommt mal ganz flugs weg... (*schaem*) Gruss Peter Blancke -- Nachtwaechter ist der Wahnsinn, weil er wacht...
participants (6)
-
B.Brodesser@t-online.de
-
Daniel Wolpert
-
David Haller
-
Marc Schiffbauer
-
MichaelHoeller@t-online.de
-
Peter Blancke