Con bash
(o qualsiasi shell, a condizione che il printf
comando sia disponibile (un comando POSIX standard spesso incorporato nelle shell)):
printf '%x\n' 85
Con zsh
, puoi anche fare:
dec=85
hex=$(([##16]dec))
Funziona con basi da 2 a 36 (con 0-9a-z
maiuscole e minuscole come le cifre).
Con ksh93
, puoi usare:
dec=85
base54=$(printf %..54 "$dec")
Che funziona per basi da 2 a 64 (con 0-9a-zA-Z@_
come cifre).
Con ksh
e zsh
, c'è anche:
$ typeset -i34 x=123; echo "$x"
34#3l
Anche se questo è limitato a basi fino a 36 in ksh88, zsh e pdksh e 64 in ksh93.
Nota che tutti questi sono limitati alle dimensioni degli long
interi sul tuo sistema ( int
è con alcune shell). Per qualcosa di più grande, puoi usare bc
o dc
.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
Con basi supportate che vanno da 2 a un certo numero richiesto da POSIX per essere alto almeno fino a 99. Per basi superiori a 16, le cifre maggiori di 9 sono rappresentate come numeri decimali con spaziatura zero separati da spazio.
$ echo 'obase=30; 123456' | bc
04 17 05 06
O lo stesso con dc
( bc
usato per essere (ed è ancora su alcuni sistemi) un wrapper in giro dc
):
$ echo 30o123456p | dc
04 17 05 06