Con bash(o qualsiasi shell, a condizione che il printfcomando 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-zmaiuscole 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 kshe 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 longinteri sul tuo sistema ( intè con alcune shell). Per qualcosa di più grande, puoi usare bco 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( bcusato per essere (ed è ancora su alcuni sistemi) un wrapper in giro dc):
$ echo 30o123456p | dc
04 17 05 06