Un script shell interprète un nombre comme décimal (base 10), sauf si ce nombre a un certain préfixe ou notation. Un nombre précédé par un 0 est octal (base 8). Un nombre précédé par 0x est hexadécimal (base 16). Un nombre comprenant un # est évalué comme BASE#NOMBRE (avec les restrictions d'intervalle et de codification).
Exemple 8.4. Représentation des constantes numériques
#!/bin/bash
# numbers.sh: Représentation des nombres en différentes bases.
# Décimal: par défaut
let "dec = 32"
echo "nombre décimal = $dec" # 32
# Rien qui ne sort de l'ordinaire ici.
# Octal: nombres précédés par '0' (zero)
let "oct = 032"
echo "nombre octal = $oct" # 26
# Exprime le résultat en décimal.
# ------- -- -------- -- -------
# Hexadecimal: nombres précédés par '0x' ou '0X'
let "hex = 0x32"
echo "nombre hexadécimal = $hex" # 50
# Exprime le résultat en décimal.
# Autres bases: BASE#NOMBRE
# BASE entre 2 et 64.
# NUMBER doit utiliser les symboles compris dans l'intervalle BASE, voir ci-dessous.
let "bin = 2#111100111001101"
echo "nombre binaire = $bin" # 31181
let "b32 = 32#77"
echo "nombre en base-32 = $b32" # 231
let "b64 = 64#@_"
echo "nombre en base-64 = $b64" # 4031
# Cette notation fonctionne seulement pour un intervalle limité (2 - 64) des caractères ASCII
# 10 chiffres + 26 caractères minuscules + 26 caractères majuscules + @ + _
echo
echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA))
# 1295 170 44822 3375
# Note importante:
# ----------------
# Utiliser un chiffre en dehors de l'échelle de la notation spécifiée
#+ donne un message d'erreur.
let "bad_oct = 081"
# Message d'erreur (partiel) en sortie:
# bad_oct = 081 : valeur trop élevée pour la base (l'erreur est "081")
# Les nombres octal utilisent seulement des chiffres dans l'intervalle 0 - 7.
exit 0 # Merci, Rich Bartell et Stephane Chazelas, pour cette clarification.