Con bash(o cualquier shell, siempre que el printfcomando esté disponible (un comando POSIX estándar a menudo integrado en los shells)):
printf '%x\n' 85
Con zsh, también puedes hacer:
dec=85
hex=$(([##16]dec))
Eso funciona para bases del 2 al 36 (con 0-9a-zmayúsculas y minúsculas como dígitos).
Con ksh93, puedes usar:
dec=85
base54=$(printf %..54 "$dec")
Que funciona para bases de 2 a 64 (con 0-9a-zA-Z@_los dígitos).
Con kshy zsh, también hay:
$ typeset -i34 x=123; echo "$x"
34#3l
Aunque eso se limita a bases de hasta 36 en ksh88, zsh y pdksh y 64 en ksh93.
Tenga en cuenta que todos estos están limitados al tamaño de los longenteros en su sistema ( intcon algunos shells). Para cualquier cosa más grande, puedes usar bco dc.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
Con bases admitidas que van desde 2 hasta algún número, POSIX requiere que sea al menos tan alto como 99. Para bases mayores que 16, los dígitos mayores que 9 se representan como números decimales con relleno de 0 separados por espacios.
$ echo 'obase=30; 123456' | bc
04 17 05 06
O lo mismo con dc( bcsolía ser (y todavía está en algunos sistemas) una envoltura dc):
$ echo 30o123456p | dc
04 17 05 06