Синтаксис -i[n]
typeset
относится к ksh
и недоступен в bash
.В вашей попытке код -i2
означает представление выходных данных в содержимом базы 2, то есть в виде двоичного значения.В ksh93
typeset -i2 var=15
echo "$var"
выдает значение в двоичном виде
2#1111
Итак, с этой логикой ваш исходный код инициализирует значение для var
в двоичном виде 0
.Если бы вы инициализировали что-то как 2#1111
, было бы более понятно, что означает флаг.Вы не можете использовать неосновные числа 2 с этим синтаксисом, поскольку он просто выдаст синтаксическую ошибку, т.е. что-то вроде выполнения typeset -i2 var=2#15
никогда не будет работать.
Обратите внимание, что typeset
является устаревшей конструкцией как в ksh
, так и в *.bash
снаряды.Использование declare
предоставляет аналогичные параметры и многое другое.В bash
вы можете использовать арифметический оператор для того же $((..))
, если вы определили число в базе 2
var='2#1111'
echo "$(( var ))"
15
Но нет встроенного способа выполнить преобразование базы 2 из десятичного числав bash
без использования сторонних инструментов, таких как bc
echo 'obase=2;15' | bc
1111