Я прочитал следующую инструкцию в сценарии оболочки korn:
typeset -i2 var=2#0
Мне удалось узнать, что с помощью typeset
вы можете указать тип переменных и что параметр -i2
описывает, что переменная является целым числом, которое следует интерпретировать в системе счисления 2 (двоичной).
Однако я до сих пор не могу понять, что означает значение, присвоенное переменной (2#0
).
Погуглив, я обнаружил, что такие инструкции, как variable#pattern
, означают, что вхождения шаблона будут удалены из начала переменной, но, похоже, это не так...
Обновлено: кажется, что синтаксис -in
специфичен для оболочки korn (ksh
)
@ArkadiuszDrabczyk: Нет, это инициализация var
как двоичного файла 0
. Можно было бы инициализировать 15 таким образом в двоичном виде как 2#1111
На самом деле это не вопрос бить: bash: typeset: -2: invalid option
, хотя bash включает синтаксис «base#value» в арифметическом контексте (который typeset/declare/local -i
вводит: declare -i x=16#deadbeef; echo $x
Синтаксис -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
Другой способ с постоянным током: echo '15 2op' | Округ Колумбия
В ksh
sh (AT&T Research) 93u+ 2012-08-01
этоecho "$var"
показывает просто2#0
, так что, может быть, это просто значение этой переменной без особого смысла?