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. |