НАЗВАНИЕ
expr - обработка аргументов как выражений
СИНТАКСИС
expr аргумент ...
ОПИСАНИЕ
Команда expr трактует свои аргументы как выражения. Результат записывается на стандартный вывод. Операнды выражения должны быть разделены пробелами. Символы, имеющие для shell'а специальный смысл, должны быть экранированы. Заметим, что 0 возвращается в качестве числа, а
не для обозначения пустой цепочки символов. Аргументы,
содержащие пробелы или другие специальные символы,
должны быть заключены в кавычки. Перед целыми числами
может стоять знак минус. Внутреннее представление целых
чисел - 32-битное, в дополнительном коде.
Ниже приведен список знаков операций в порядке возврастания приоритетов, операции с равным приоритетом заключены в фигурные скобки. Перед символами, которые должны быть экранированы, стоит \.
ПРИМЕРЫ
a=`expr $a + 1`
expr $a : '.*/\(.*\)' \| $aПриведем теперь более удачное решение. Добавление // устраняет проблемы, связанные с одиночным символом /, и упрощает выражение.
expr //$a : '.*/\(.*\)'
expr $V : '.*'
СМ. ТАКЖЕ
ed(1), sh(1).
КОДЫ ЗАВЕРШЕНИЯ В качестве побочного эффекта вычисления выражений expr возвращает следующие коды завершения:
0 Значение выражения отлично от нуля и от пустой це- почки символов. 1 Значение выражения есть нуль или пустая цепочка символов. 2 Выражение некорректно.
ДИАГНОСТИКА
Команда expr выдает следующие сообщения об ошибках:
syntax error При ошибках в операторах или операндах. non-numeric argument При попытках применения арифметических операций к нечисловым цепочкам символов.
СЮРПРИЗЫ
Допустим, что мы хотим сравнить значение переменной a с
каким-либо символом, имеющим для expr особый смысл,
например, со знаком равенства. Пусть $a на самом деле
является знаком равенства. Так как аргументы предварительно обрабатываются shell'ом, то команда
expr $a = '='будет воспринята как
expr = = =что синтаксически некорректно. В подобных случаях рекомендуется пользоваться таким приемом:
expr X$a = X=то есть добавить некоторый символ к обеим цепочкам, что никак не влияет на результат сравнения, однако позволяет избежать синтаксической ошибки