Bernd Brodesser wrote:
* Clemens Wohld schrieb am 16.Aug.2000:
Frage? Was mach ich hier falsch?
Ich hab es schon $(($online)-$(date +%s))
Die Syntax für Rechnungen lautet: $((...)) also doppelte Klammer, Du kannst aber dann natürlich keine schließende Klammer darin haben, bevor Du noch eine öffnende hast.
Nimm doch mal das $(( und das )) weg, dann bleibt bei Dir $online)-$(date +%s stehen. Das kann es doch nicht sein. Richtig wäre: $((($online)-$(date +%s)))
na ja, aber $(...) führt analog zu `...` einen Befehl aus. In diesem Fall hier wird von der Shell nicht $(( )) erkannt, da IMHO nach den öffnenden und vor den schließenden Klammern ein Blank stehen muß, damit die mathematische Operation ausgeführt wird. obiges $(($online)-$(date +%s)) entspricht also `($online)-$(date +%s)` und kann nicht funktionieren, da geschachtelte "Ausführungsoperatoren" nicht gehen.
wobei aber die Klammer um $online überflüssig ist, es tuts auch ACK
$(($online-$(date +%s)))
IMHO fehlen hier wieder die Blanks. Dieser Ausdruck entspricht: `($online-$(date +%s))` und kann auch nicht funktionieren
Natürlich mußt Du damit was machen. Die shell ersetzt den Ausdruck mit dem Ergebnis. Da muß denn schon eine Zuweisung erfolgen, oder ein echo oder sonstwas.
oder $($(online)-$(date +%s)), so eine Std. alles mal getestet aber
Das kann es so wie so nicht sein, da die Syntax $((...)) lautet, also mit doppelten Klammer.
Na ja, dies entspricht wieder `$(online)-$(date +%s)`.
nicht zum exacten Ergebnis gekommen :(
In der Reihenfolge, in der Du es oben beschreibst, erhälst Du so wie so immer ein negatives Ergebnis, da Du von dem älteren, also kleineren Datum, daß neuere also größere abziehst, besser wäre somit:
$(($(date +%s)-$online))
Ja , aber mit Blanks, oder? $(( $(date +%s)-$online )) sollte gehen. Andreas PS: Ich habe hier gerade keine bash zu Hand, nur eine ksh. Aber ich denke, die Regeln sind hier nicht anders. --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Andreas.Kyek@arcor.net schrieb am 17.Aug.2000:
Bernd Brodesser wrote:
Nimm doch mal das $(( und das )) weg, dann bleibt bei Dir $online)-$(date +%s stehen. Das kann es doch nicht sein. Richtig wäre: $((($online)-$(date +%s)))
na ja, aber $(...) führt analog zu `...` einen Befehl aus. In diesem
Das ist richtig.
Fall hier wird von der Shell nicht $(( )) erkannt, da IMHO nach den
Doch wird es. Probiers doch aus.
öffnenden und vor den schließenden Klammern ein Blank stehen muß, damit die mathematische Operation ausgeführt wird.
Muß offensichtlich nicht. Ich habe es jetz gerade noch mal ausprobiert, es ist sich gleich, ob da ein Blank steht oder nicht. Nur zwichen $(( oder zwichen )) darf kein Blank stehen, die Zeichenfolge muß so sein. Dollar-Klammer auf-Klammer auf, ohne Blank dazwichen und am Ende Klammer zu-Klammer zu auch ohne Blank dazwichen. Aber innerhalb der Doppelklammer ist es egal ob da ein Blank steht oder nicht. Allerdings darf da nicht, so wie Clemens es gemacht hat, eine weitere schließende Klammer vor einer öffnenden kommen.
obiges $(($online)-$(date +%s)) entspricht also `($online)-$(date +%s)` und kann nicht funktionieren, da geschachtelte "Ausführungsoperatoren" nicht gehen.
Doch geschachtelte Ausführungsoperatoren gehen. Das ist doch gerade der Vorteil von der $(...) Schreibweise gegenüber der `...` schreibweise, denn da geht es natürlich nicht, da der öffnende Operator nicht vom schließenden zu unterscheiden ist.
$(($online-$(date +%s)))
IMHO fehlen hier wieder die Blanks. Dieser Ausdruck entspricht:
Nein, Probiers aus: online=$(date +%s) echo $(($online-$(date +%s)))
$(($(date +%s)-$online))
Ja , aber mit Blanks, oder?
Nicht nötig.
$(( $(date +%s)-$online )) sollte gehen.
PS: Ich habe hier gerade keine bash zu Hand, nur eine ksh. Aber ich denke, die Regeln sind hier nicht anders.
Anscheinend doch. Allerdings wenn es bei der ksh anders ist, sollte man doch lieber Blanks einbauen. Wenn man es absolut kompatiebel haben möchte, dann ist expr angesagt. Allerdings gibt es date +%s ihmo auch nur bei dem GNU date. Bernd -- Probleme mit dem Drucker? Schon die Druckercheckliste beachtet? http://localhost/doc/sdb/de/html/drucker-howto.html | Auch lesenswert: Oder schon das Drucker-HOWTO gelesen? | man lpr file://usr/doc/howto/de/DE-Drucker-HOWTO.txt.gz | Zufallssignatur 3 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Don, Aug 17, 2000 at 01:55:08 +0200, Bernd Brodesser wrote:
Doch geschachtelte Ausführungsoperatoren gehen. Das ist doch gerade der Vorteil von der $(...) Schreibweise gegenüber der `...` schreibweise, denn da geht es natürlich nicht, da der öffnende Operator nicht vom schließenden zu unterscheiden ist.
[...]
online=$(date +%s) echo $(($online-$(date +%s)))
Ihr traut der Shell einfach zu wenig zu! Das hier sollte sogar unter der dümmsten Bourne-Shell laufen: online=`date +%s` echo `expr \`date +%s\` - $online` und sieht IMHO sogar noch viel schöner aus ;-) Soviel zum Thema *geschachtelte Ausführungsoperatoren*. Getestet unter Kernel 2.2.10 (bash 2.03.0) und Kenrel 2.0.35 (bash 2.01.1) Jan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* On Thu, Aug 17, 2000 at 10:08:49AM +0100, Andreas.Kyek@arcor.net wrote:
Bernd Brodesser wrote:
* Clemens Wohld schrieb am 16.Aug.2000:
$(( $(date +%s)-$online )) sollte gehen.
Sorry, ...auch syntaxerror, ob (wie bei Bernd) mit oder ohne blanks :( Solangsam such ich mir lieber was mit perl ... haut nicht hin. Das mit den [ ] (Vorschlag von David) da komm ich weiter, nur da stimmen die Formatierungen noch nicht. Andere Idee? Bessere als subtr. mit shell? Gruß Clemens -- sig_36 Ausgabe deiner Grafikkarten-Infos (Chipsatz usw.) erreichst du, als root, mit dem Kommando: `SuperProbe' Und noch mehr X Infos gibt dir: `X -showconfig' oder: [Info: man X] $ X -probeonly > /tmp/x.out 2>&1 ------------------------------------------------------ --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
* Clemens Wohld schrieb am 17.Aug.2000:
Solangsam such ich mir lieber was mit perl ... haut nicht hin. Das mit den [ ] (Vorschlag von David) da komm ich weiter, nur da stimmen die Formatierungen noch nicht.
Andere Idee? Bessere als subtr. mit shell?
Bei mir klappt es bestens. Mit der bash, nicht mit der normalen Bourne-shell. Wenn Du nicht die bash nimmst, dann ist es besser mit expr zu arbeiten. Bernd --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (4)
-
Andreas.Kyek@arcor.net
-
B.Brodesser@online-club.de
-
c.wohld@ndh.net
-
Jan.Trippler@t-online.de