З bash
(або будь-якою оболонкою, за умови наявності printf
команди (стандартна команда POSIX, часто вбудована в оболонки)):
printf '%x\n' 85
Завдяки цьому zsh
ви також можете:
dec=85
hex=$(([##16]dec))
Це працює для баз від 2 до 36 (з 0-9a-z
регістром, як цифри).
З ksh93
, ви можете використовувати:
dec=85
base54=$(printf %..54 "$dec")
Який працює для баз від 2 до 64 (з 0-9a-zA-Z@_
цифрами).
З ksh
і zsh
, є також:
$ typeset -i34 x=123; echo "$x"
34#3l
Хоча це обмежено базами до 36 в ksh88, zsh і pdksh і 64 в ksh93.
Зауважте, що всі вони обмежені розміром long
цілих чисел у вашій системі ( int
з деякими оболонками). Для чогось більшого ви можете використовувати bc
або dc
.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
Для підтримуваних баз від 2 до деякого числа, вимагається POSIX, щонайменше до 99. Для баз більше 16 цифри, що перевищують 9, представлені у вигляді десяткових чисел, розділених пробілами, десяткові цифри.
$ echo 'obase=30; 123456' | bc
04 17 05 06
Або те саме з dc
( bc
раніше був (і все ще є в деяких системах) обгорткою dc
):
$ echo 30o123456p | dc
04 17 05 06