Команда expr
Команда expr применяется для вычисления выражений. Результат выводится на стандартный вывод. Операнды выражения должны быть разделены пробелами. Метасимволы должны быть экранированы. Надо заметить, что 0 возвращается в качестве числа, а не для индикации пустой строки. Строки, содержащие пробелы или другие специальные символы, должны быть заключены в кавычки. Целые рассматриваются как 32-битные числа.
Ниже приведен список операторов в порядке возрастания приоритета, операции с равным приоритетом заключены в фигурные скобки. Перед символами, которые должны быть экранированы, стоит \.
<выр> \| <выр> | если первое <выр> не пустое и не нулевое, то возвращает его, иначе возвращает второе <выр> |
<выр> \& <выр> | если оба <выр> не пустые и не нулевые, то возвращает первое <выр>, иначе возвращает 0 |
<выр> { =, \>, \>=, \<, \<=, != } <выр> | возвращает результат целочисленного сравнения если оба <выр> - целые; иначе возвращает результат лексического сравнения |
<выр> { +, - } <выр> | сложение и вычитание целочисленных аргументов |
<выр> { \*, /, % } <выр> | умножение, деление и получение остатка от деления целочисленных аргументов |
<выр> : <выр> | оператор сопоставления : сопоставляет первый аргумент со вторым, который должен быть регулярным выражением. Обычно оператор сравнения возвращает число символов, удовлетворяющих образцу (0 при неудачном сравнении). Однако символы \( и \) могут применяться для выделения части первого аргумента. |
Регулярное выражение строится следующим образом:
. | - обозначает любой символ |
* | - обозначает предыдущий символ, повторенный несколько раз |
[] | - обозначают любой один из указанных между ними символов; группа символов может обозначаться с помощью знака "-" (т.е. [0-9] эквивалентно [0123456789]); если после [ стоит ^, то это эквивалентно любому символу, кроме указанных в скобках и <возврата_каретки>; для указания ] в качестве образца, надо поставить ее сразу за [ (т.е. []...]); . и * внутри квадратных скобок обозначают самих себя |
Все остальные символы (и ^, если стоит не в квадратных скобках)
обозначают самих себя. Для указания символов ., *,[ и ] надо
экранировать их (т.е. писать \., \*, \[, \]).