| Guida avanzata di scripting Bash: Un'approfondita esplorazione dell'arte dello scripting di shell | ||
|---|---|---|
| Indietro | Capitolo 8. Operazioni ed argomenti correlati | Avanti |
Lo script di shell interpreta un numero come numero decimale (base 10), tranne quando quel numero è scritto in una notazione particolare o con un prefisso specifico. Un numero preceduto da 0 è un numero ottale (base 8). Un numero preceduto da 0x è un numero esadecimale (base 16). Un numero contenente un # viene valutato come BASE#NUMERO (con limitazioni di notazione ed ampiezza).
Esempio 8-4. Rappresentazione di costanti numeriche
#!/bin/bash
# numbers.sh: Rappresentazione di numeri con basi differenti.
# Decimale: quella preimpostata
let "dec = 32"
echo "numero decimale = $dec" # 32
# Qui non c'è niente di insolito.
# Ottale: numeri preceduti da '0' (zero)
let "oct = 032"
echo "numero ottale = $ott" # 26
# Risultato visualizzato come decimale.
# --------- ------------ ---- --------
# Esadecimale: numeri preceduti da '0x' o '0X'
let "esa = 0x32"
echo "numero esadecimale = $esa" # 50
echo $((0x9abc)) # 39612
# ^^ ^^ espansione/valutazione aritmetica
# per mezzo del costrutto doppie-parentesi
# Risultato visualizzato come decimale.
# Altre basi: BASE#NUMERO
# BASE tra 2 e 64.
# NUMERO deve essere formato dai simboli nell'intervallo indicato da
#+ BASE, vedi di seguito.
let "bin = 2#111100111001101"
echo "numero binario = $bin" # 31181
let "b32 = 32#77"
echo "numero in base 32 = $b32" # 231
let "b64 = 64#@_"
echo "numero in base 64 = $b64" # 4031
#
# Questa notazione funziona solo per un intervallo limitato (2 - 64)
#+ di caratteri ASCII
# 10 cifre + 26 caratteri minuscoli + 26 caratteri maiuscoli + @ + _
echo
echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA))
# 1295 170 44822 3375
# Nota importante:
# ---------------
# Utilizzare un simbolo al di fuori dell'intervallo della base specificata
#+ provoca un messaggio d'errore.
let "ott_errato = 081"
# Messaggio (parziale) d'errore visualizzato:
# ott_errato = 081: value too great for base
#+ (error token is "081")
# I numeri ottali utilizzano solo cifre nell'intervallo 0 - 7.
exit 0 # Grazie, Rich Bartell e Stephane Chazelas, per il chiarimento. |