Что означает набор -i2 var=2#0 в оболочке bash/korn?

Я прочитал следующую инструкцию в сценарии оболочки korn:

typeset -i2 var=2#0

Мне удалось узнать, что с помощью typeset вы можете указать тип переменных и что параметр -i2 описывает, что переменная является целым числом, которое следует интерпретировать в системе счисления 2 (двоичной). Однако я до сих пор не могу понять, что означает значение, присвоенное переменной (2#0).

Погуглив, я обнаружил, что такие инструкции, как variable#pattern, означают, что вхождения шаблона будут удалены из начала переменной, но, похоже, это не так...

Обновлено: кажется, что синтаксис -in специфичен для оболочки korn (ksh)

В ksh sh (AT&T Research) 93u+ 2012-08-01 это echo "$var" показывает просто 2#0, так что, может быть, это просто значение этой переменной без особого смысла?

Arkadiusz Drabczyk 21.06.2019 12:30

@ArkadiuszDrabczyk: Нет, это инициализация var как двоичного файла 0. Можно было бы инициализировать 15 таким образом в двоичном виде как 2#1111

Inian 21.06.2019 13:21

На самом деле это не вопрос бить: bash: typeset: -2: invalid option, хотя bash включает синтаксис «base#value» в арифметическом контексте (который typeset/declare/local -i вводит: declare -i x=16#deadbeef; echo $x

glenn jackman 21.06.2019 14:32
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
158
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Синтаксис -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' | Округ Колумбия

ctac_ 21.06.2019 18:35

Другие вопросы по теме