Hexadezimal zählen lassen

Manchem fällt es leicht, anderen nicht: das Arbeiten in verschiedenen Zahlensystemen. Ich selbst komme mit binären Zahlen und dezimalen recht gut klar, mit hexadezimalen Zahlen tue ich mich eher schwer. Spätestens bei IPv6 komme ich aber nicht mehr drum herum, weil dort die IP-Adressen nicht mehr dezimal sondern hexadezimal notiert werden.

Trotzdem darf mensch faul sein und zählen lassen. Ich suchte also nach einem bequemen Weg von einem Shell-Skript hexadezimal zählen zu lassen und wurde recht schnell im Internet fündig:

#!/bin/sh
# count from 0 to FFFF
declare -i i=0;
while ((i <= 16#FFFF)) ; do
H=$(printf "%X\n" $i);
echo $H;
((i=i+1));
done
exit 0;

Hierzu braucht man nur noch zu wissen, was 16#FFFF letztlich bedeutet: Zuerst wird die Basis angegeben, in diesem Fall 16, dann wird hinter dem # die gewünschte Zahl notiert. Ein bloßes i <= FFFFF genügt nicht, weil Bash als nicht typisierte Sprache sonst nicht weiß, ob sie es mit Zahlen oder Buchstaben zu tun hat. Wer binär zählen lassen will muß entsprechend 2#1111 oder etwas ähnliches verwenden. Aber: Damit ist nur die Zahl angegeben, wenn man sich das ausgeben läßt sieht man, daß Bash intern immer noch dezimal zählt. Damit die Ergebnisse auch hexadezimal notiert werden, braucht es die Konversion mit H=$(printf "%X\n" $i). Das Zauberwort lautet hier %X.