Стандартная встроенная команда let оболочки Korn (POSIX) позволяет выполнять арифметические операции над целыми числами. Константы имеют формат [Основание]Число. Параметр Основание представляет собой десятичное число в диапазоне от 2 до 36 включительно, указывающее основание системы счисления. В параметре Число указывается число в этой системе. Если параметр Основание не указан, принимается значение 10.
Синтаксис, приоритет операторов и
ассоциативность операторов в арифметических выражениях подчиняются правилам
языка C. Поддерживаются все операторы, кроме двойного плюса
(++), двойного дефиса (--), вопросительного знака с
двоеточием (?:) и запятой (,). В следующей
таблице перечислены допустимые операторы оболочки Korn (POSIX) в порядке
убывания приоритета:
Арифметические операторы оболочки Korn | |
Оператор | Определение |
- | Унарный минус |
! | Логическое отрицание |
~ | Поразрядное отрицание |
* | Умножение |
/ | Деление |
% | Остаток |
+ | Сложение |
- | Вычитание |
<<, >> | Сдвиг влево, сдвиг вправо |
<=,>=, <>, ==, != | Сравнение |
& | Поразрядное И |
^ | Поразрядное исключающее ИЛИ |
| | Поразрядное ИЛИ |
&& | Логическое И |
|| | Логическое ИЛИ |
= *=, /=, &= +=, -=, <<=, > >=, &=, ^=, |= | Присвоение |
Многие арифметические операторы, такие как *, &, < и >, в оболочке Korn (POSIX) интерпретируются специальным образом. Такие символы должны быть заключены в кавычки. Например, для умножения текущего значения переменной y на 5 и присвоения нового значения переменной y укажите выражение:
let "y = y * 5"
Заключение выражения в кавычки отменяет специальное значение символа *.
Операции в команде let можно объединять в группы скобками. Например, в выражении:
let "z = q * (z - 10)"
переменная q будет умножено на уменьшенное на 10 значение переменной z.
Если необходимо вычислить только одно выражение, оболочка Korn (или POSIX) допускает альтернативную форму команды let. Оболочка рассматривает команды, заключенные в (( )), как выражения в кавычках. Таким образом, выражение
((x = x / 3))
let "x = x / 3"
На именованные параметры внутри арифметических выражений можно ссылаться просто по их имени, без какого-либо синтаксиса подстановки параметра. При этом значение параметра вычисляется как арифметическое выражение.
Внутреннее числовое представление именованного параметра можно указать с помощью флага -i специальной встроенной команды typeset. С флагом -i арифметические вычисления выполняются над каждым значением, присваиваемым именованному параметру. Если основание системы счисления не указано, оно определяется по первому присвоенному значению. Это основание применяется только при подстановке параметра.