С помощью 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 представляются в виде разделенных пробелами 0-запятых десятичных чисел.
$ echo 'obase=30; 123456' | bc
04 17 05 06
Или то же самое с dc
( bc
раньше было (и до сих пор есть в некоторых системах) оболочкой dc
):
$ echo 30o123456p | dc
04 17 05 06