expr

Вычисление аргументов как выражения (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=

Возвращаемое значение:

0
Результат вычисления выражения не равен null или нулю.
1
Результат вычисления выражения равен null или нулю.
2
Обнаружены недействительные выражения.
>2
Возникла ошибка.

Предостережения:

Синтаксис команды 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

Тематические ссылки:

grep




Предыдущий раздел: Утилиты