[bash] maximale Zahl?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
MoonKid
Beiträge: 513
Registriert: 12.03.2012 22:36:43

[bash] maximale Zahl?

Beitrag von MoonKid » 07.01.2013 16:29:36

Ich speichere in einer Variable einen Zeitraum in Minuten.
Wieviele Minuten passen da rein? Was steckt da für ein Datentyp dahinter? Dazu konnte ich im Netz (Mangles sinnvoller keywords) nichts finden.

Könnte man ggf. den Datentyp so manipulieren (z.B. unsigned long statt signed long), dass mehr rauszuholen ist?

Also was ist der größtmögliche Zeitraum, den ich mit einer Minutenvariable darstellen könnte?

MoonKid
Beiträge: 513
Registriert: 12.03.2012 22:36:43

Re: [bash] maximale Zahl?

Beitrag von MoonKid » 07.01.2013 16:36:53

Scheinbar wird der Wert nicht von bash sondern von "test" definiert. In dessen docs kann ich aber nix finden.

Gehen wir von einem 32bit System aus, so könnte der maximale Long Integer bei "2147483647" liegen. Sind das Minuten, entspräche das über 4189 Jahren. Soviel Zeit sollte zwischen zwei Backup-Läufen eh nicht vergehen. :D

Da es sich aber um das Zeitmanagement meines Backup-Environments handelt, möchte ich hier doch gerne absolut sicher gehen.

Benutzeravatar
Phineas
Beiträge: 355
Registriert: 20.06.2012 20:26:19

Re: [bash] maximale Zahl?

Beitrag von Phineas » 07.01.2013 16:58:15

Code: Alles auswählen

~> echo $((2**63-1))
9223372036854775807
~> test 9223372036854775807 -ge 0 && echo geht noch
geht noch
~> test 9223372036854775808 -ge 0 && echo geht noch
bash: test: 9223372036854775808: integer expression expected
Also signed int64

uname
Beiträge: 12442
Registriert: 03.06.2008 09:33:02

Re: [bash] maximale Zahl?

Beitrag von uname » 07.01.2013 16:59:48

Auch sehr nett einfach immer zu verdoppeln und schauen ob sich was bei einem anderen Variablentyp ändert.

Code: Alles auswählen

#!/bin/bash
a=2;
while :;
do
  echo $a;
  a=$((2*a));
done

Benutzeravatar
Meillo
Moderator
Beiträge: 9261
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [bash] maximale Zahl?

Beitrag von Meillo » 07.01.2013 17:39:25

MoonKid hat geschrieben:Scheinbar wird der Wert nicht von bash sondern von "test" definiert.
Sicher? Und ueberhaupt, was meinst du mit ``test''?
Use ed once in a while!

MoonKid
Beiträge: 513
Registriert: 12.03.2012 22:36:43

Re: [bash] maximale Zahl?

Beitrag von MoonKid » 07.01.2013 19:53:48

Experimente sind ja eine Sache, aber gibt es dazu keine Doku. Ist das nicht irgendwo sicher definiert? Vielleicht eine Konstante?

wanne
Moderator
Beiträge: 7591
Registriert: 24.05.2010 12:39:42

Re: [bash] maximale Zahl?

Beitrag von wanne » 08.01.2013 00:39:17

Natürlich gibt's dazu ne Doku: http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz :twisted:
Wenn man da in die expr.c reinguckt, dann sieht man, dass die ihre Vaiablen als intmax_t definert haben. (Ich nehme an, dass die für expr die gleichen typen wie sonstwo nehmen.)
Der C99 Standard sagt dazu:
intmax_t

Code: Alles auswählen

typedef long long intmax_t;
The type specifies the largest signed integer type. Note that the definition shown here is merely representative.
Quelle: http://www.qnx.com/developers/docs/6.4. ... l#intmax_t

=> Das ding ist auf gewähnlichen PCs ein long long int (singht 64Bit). Und da das so im Source steht ist das wohl auch nicht zu ändern. (Esseiden du schreibst den Code neu.)
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
Meillo
Moderator
Beiträge: 9261
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [bash] maximale Zahl?

Beitrag von Meillo » 08.01.2013 08:13:03

wanne hat geschrieben:Natürlich gibt's dazu ne Doku: http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz :twisted:
Sehr schoen. :-D

Vielen Dank fuer die Erlaeuterungen. :THX:
Use ed once in a while!

Antworten