Spec-Zone.ru › Bash

Арифметические вычисления в оболочке

​ ​ ​ ​ ​

Оболочка позволяет вычислять арифметические выражения в рамках одного из видов подстановки оболочки или с помощью составной команды ((, встроенных команд let и declare, арифметической команды for, условной команды [[ или параметра -i встроенной команды declare.

Вычисления выполняются с использованием целых чисел фиксированной ширины максимально доступного размера без проверки на переполнение, однако деление на 0 перехватывается и отмечается как ошибка. Операторы, их приоритет, ассоциативность и значения совпадают с таковыми в языке C. Следующий список операторов сгруппирован по уровням операторов с одинаковым приоритетом. Уровни перечислены в порядке убывания приоритета.

​ ​ ​ ​
id++ id--

постинкремент и постдекремент переменной

++id --id

преинкремент и предекремент переменной

- +

унарные минус и плюс

! ~

логическое и побитовое отрицание

**

возведение в степень

* / %

умножение, деление, остаток от деления

+ -

сложение, вычитание

<< >>

побитовые сдвиги влево и вправо

<= >= < >

сравнение

== !=

равенство и неравенство

&

побитовое И

^

побитовое исключающее ИЛИ

|

побитовое ИЛИ

&&

логическое И

||

логическое ИЛИ

expr ? if-true-expr : if-false-expr

условный оператор

= *= /= %= += -= <<= >>= &= ^= |=

присваивание

expr1 , expr2

запятая

Переменные оболочки можно использовать в качестве операндов; перед вычислением выражения выполняется подстановка параметров. Внутри выражения на переменные оболочки также можно ссылаться по имени без использования синтаксиса подстановки параметров. Это означает, что в арифметическом выражении можно использовать x, где x — имя переменной оболочки, и оболочка вычислит её значение как выражение и использует результат. Переменная оболочки, значение которой пусто или не задано, при обращении по имени в выражении принимает значение 0.

Значение переменной вычисляется как арифметическое выражение при обращении к ней или при присваивании значения переменной, которой был задан атрибут integer с помощью ‘declare -i’. Пустое значение принимает значение 0. Чтобы использовать переменную оболочки в выражении, не требуется включать её атрибут integer.

Целочисленные константы соответствуют определению языка C, без суффиксов и символьных констант. Константы с начальным 0 интерпретируются как восьмеричные числа. Начальное ‘0x’ или ‘0X’ обозначает шестнадцатеричное число. В остальных случаях числа имеют вид [base#]n, где необязательное значение base — десятичное число от 2 до 64, задающее основание системы счисления, а n — число в этой системе счисления. Если base# не указано, используется основание 10. При указании n, если требуется символ, не являющийся цифрой, значения больше 9 обозначаются строчными буквами, прописными буквами, ‘@’ и ‘_’ именно в таком порядке. Если значение base меньше или равно 36, строчные и прописные буквы можно использовать взаимозаменяемо для обозначения чисел от 10 до 35.

Операторы вычисляются в порядке приоритета. Подвыражения в скобках вычисляются первыми и могут переопределять описанные выше правила приоритета.

Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Shell-Arithmetic.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API