Вычисление аргументов как выражения (POSIX)
expr операнд...
ЗОСРВ «Нейтрино»
aarch64, arm, armv7, e2k, mips, ppc, x86
Утилита expr используется для вычисления одиночного выражения; результат вычисления записывается в стандартный поток вывода. Выражение формируется из целочисленных и строковых символов в комбинации со следующими операторами:
( ) | & = > >= < <= != + - * / % :
В следующей таблице приведены выражения в порядке уменьшения приоритета, операторы с равным приоритетом сгруппированы вместе. Все операторы ассоциативны слева направо. Следует отметить, что строковый операнд – это аргумент, который не определяется как целочисленный аргумент или как один из приведенных выше операторов.
Выражение | Описание |
---|---|
целое число | Аргумент, состоящий только из (необязательного) одинарного минуса и последующих цифр |
строка | Строковый аргумент |
( выражение ) | Символы группирования; внутри скобок можно поместить любое выражение. |
выражение1 : выражение2 | Сопоставление выражений |
выражение1 * выражение2 | Целочисленное умножение |
выражение1 / выражение2 | Целочисленное деление с целочисленным результатом |
выражение1 % выражение2 | Остаток от целочисленного деления |
выражение1 + выражение2 | Целочисленное сложение |
выражение1 - выражение2 | Целочисленное вычитание |
выражение1 = выражение2 | Равно (*) |
выражение1 > выражение2 | Больше (*) |
выражение1 >= выражение2 | Больше или равно (*) |
выражение1 < выражение2 | Меньше (*) |
выражение1 <= выражение2 | Меньше или равно (*) |
выражение1 != выражение2 | Не равно (*) |
выражение1 & выражение2 | Возвращается результат вычисления выражения выражение1, если ни в одном из выражений не получается результат, равный null или нулю, в противном случае – ноль. |
выражение1 | выражение2 | Возвращается результат вычисления выражения выражение1, если он не равен null или нулю; в противном случае возвращается результат вычисления выражения выражение2 |
(*) Возвращается результат десятичного целочисленного сравнения, если оба аргумента являются целыми числами (тип integer); в противном случае возвращается результат сравнения строк. Результат каждого сравнения равен 1, если указанное отношение равно TRUE, и 0, если – FALSE.
Оператор сопоставления ":" сравнивает регулярное выражение, полученное вычислением выражение2, с шаблоном регулярного выражения, полученному вычислением выражение1. Обычно этот оператор возвращает строку, обозначающую количество удачно сопоставленных символов ("0" в случае неудачи). Однако если в шаблоне содержится по крайней мере одно подвыражение регулярного выражения \(...\), то возвращается строка, соответствующая \1 (см. grep).
Сложение 1
и 1
:
expr 1 + 1
Логическая 1
или 0
:
expr 1 \| 0
Логическая 1
и 0
:
expr 1 \& 0
Сложение 1
и $a
:
expr $(expr $a + 1)
Подсчет символов в $var
:
expr "$var" : '.*'
Сравнение $a
с возможным =
expr x$a = x=
Синтаксис команды expr требует особого внимания. Многие из операторов также являются операторами управления командного интерпретатора или зарезервированными словами, поэтому в командной строке их требуется экранировать. Кроме того, каждая часть выражения составляется из отдельных аргументов, поэтому следует использовать пробелы для их разделения. Пример:
Не рекомендуемый ввод | Рекомендуемый ввод |
---|---|
expr "1 + 2" | expr 1 + 2 |
expr 1 + (2 * 3) | expr 1 + \( 2 \* 3 \) |
expr 1 + 2 | expr 1 + 2 |
Во многих случаях проще использовать арифметические и строковые функции, предоставляемые в рамках командного языка интерпретатора команд, а не их эквиваленты из expr. Однако для выполнения старых сценариев командного интерпретатора UNIX может потребоваться утилита expr.
Если необходимо указать корень файловой системы, следует избегать использования отдельно стоящего символа / - он воспринимается командой expr как оператор деления. Его следует удвоить //.
Базовые подсистемы ЗОСРВ «Нейтрино», POSIX
Предыдущий раздел: Утилиты