При вычислении арифметических выражений вместо выражения подставляется результат
его вычисления. Для вычисления арифметических выражений используется следующий формат:
$((выражение))
или
$[выражение]
Выражение обрабатывается так, как если бы оно было взято в двойные кавычки, но двойные кавычки в самом выражении
не имеют специального значения. Во всех лексемах выражения выполняется подстановка значений параметров, подстановка строк, подстановка
результатов выполнения команд и удаление кавычек. Вычисления арифметических выражений могут быть вложенными:
$ echo $((2**2 + $((3+3)) % 4))
6
Пример 10.1
Вычисление выполняется по правилам, перечисленным ниже. Если выражение недопустимо, то командный интерпретатор
bash выдает сообщение о невозможности вычисления и завершает выполнение команды с ненулевым статусом возврата.
Вычисление арифметических выражений выполняется в длинных целых числах без проверки переполнения, хотя деление на 0 перехватывается и
выдается соответствующее сообщение об ошибке. Операторы в следующем списке сгруппированы по уровням с одинаковым приоритетом.
Уровни перечислены в порядке убывания приоритета.
id++ id––
постфиксное увеличение/уменьшение значения переменной на 1
++id ––id
префиксное увеличение/уменьшение значения переменной на 1
– +
унарные минус и плюс
! ~
логическое и побитовое отрицание
**
возведение в степень
* / %
умножение, деление, получение остатка от деления
+ –
сложение, вычитание
<< >>
побитовый сдвиг влево и вправо
<= >= < >
сравнение
== !=
равенство и неравенство
&
побитовое И
^
побитовое исключающее ИЛИ
|
побитовое ИЛИ
&&
логическое И
||
логическое ИЛИ
выражение?выражение:выражение
условное вычисление
= *= /= %= += –=
присваивание
выражение1,выражение2
запятая
В качестве операндов можно использовать переменные командного интерпретатора, так как перед вычислением выполняется подстановка
значений параметров. Значение параметра в арифметическом выражении приводится к длинному целому:
Константы с начальным 0 интерпретируются как восьмеричные числа. Начальные 0x или 0X
обозначают шестнадцатеричную константу. В остальных случаях числа имеют вид:
[основание#]n
где основание — десятичное число от 2 до 64, представляющее основание системы счисления,
а n — число в этой системе счисления. Если основание не указано, используется основание 10. Цифры, большие 9,
представляются строчными буквами, прописными буквами, символами _ и @, именно в таком порядке.
Если основание меньше или равно 36, прописные и строчные буквы эквивалентны и используются для представления чисел от 10 до 35:
Операторы вычисляются в порядке приоритетов. Сначала вычисляются подвыражения в круглых скобках, которые позволяют переопределить
представленные выше стандартные приоритеты операторов: