expr -- вычислить выражение

Версия для печатиОтправить другуPDF version
EXPR(1)               Справочник основных команд FreeBSD               EXPR(1)

НАЗВАНИЕ
     expr -- вычислить выражение
СИНТАКСИС
     expr [-e] выражение

ОПИСАНИЕ
     Утилита expr вычисляет выражение и пишет результат в стандартный вывод.
     Все операторы и операнды должны передаваться, как отдельные аргументы.
     Некоторые операторы имеют специальное значение для командных интерпрета-
     торов и, следовательно, должны заключаться в кавычки.  Все целочисленные
     операнды интерпретируются как числа с основанием 10.

     Арифметические операции выполняются, используя целочисленную знаковую
     математику.  Если указан флаг -e, арифметика использует тип данных
     intmax_t языка C (самый большой целочисленный тип данных), и expr сможет
     обнаружить арифметическое переполнение и вернуть индикатор ошибки.  Если
     указан числовой операнд, являющийся настолько большим, что происходит
     переполнение при конвертации его в целое число, то он обрабатывается как
     строка.  Если флаг -e не указан, то переполнение в результате арифметиче-
     ских вычислений и синтаксического разбора целочисленных аргументов будет
     происходить без диагностики и в соответствии с правилами стандарта языка
     C, используя тип данных long.
     Операторы перечислены ниже в порядке увеличения приоритета.  Все они
     вычисляются слева направо.  Операторы с одинаковым приоритетом сгруппиро-
     ваны внутри символов `{' и `}'.

     выражение1 | выражение2
             Вернуть вычисленное значение выражения выражение1, если оно не
             является ни пустой строкой, ни нулем.  Иначе возвращается значе-
             ние выражение2.
     выражение1 & выражение2
             Вернуть значение выражения выражение1, если ни одно из выражений
             при вычислении не становится равным пустой строке или нулю.  В
             противном случае, возвращается ноль.

     выражение1 {=, >, >=, <, <=, !=} выражение2
             Вернуть результаты целочисленного сравнения, если оба аргумента
             являются целыми числами.  В противном случае возвращает резуль-
             таты сравнения строк, используя зависящую от региональных
             настроек последовательность сравнения.  Результат каждого сравне-
             ния равен 1, если указанное соотношение справедливо, или 0, если
             соотношение ложно.

     выражение1 {+, -} выражение2
             Вернуть результаты сложения или вычитания целочисленных аргумен-
             тов.
     выражение1 {*, /, %} выражение2
             Вернуть результаты умножения, целочисленного деления, или остатка
             от деления целочисленных аргументов.

     выражение1 : выражение2
             Оператор ``:'' сопоставляет выражение1 с выражение2, которое
             должно быть базовым регулярным выражением.  Регулярное выражение
             привязывается к началу строки подразумевающимся ``^''.
             Если сопоставление проходит удачно и шаблон содержит по крайней
             мере одно подвыражение ``\(...\)'' регулярного выражения, то воз-
             вращается строка, соответствующая ``\1''.  В противном случае
             оператор сопоставления возвращает количество соответствующих
             шаблону символов.  Если сопоставление завершается неудачно и
             шаблон содержит подвыражение регулярного выражения, то возвраща-
             ется пустая строка.  В противном случае возвращается 0.

     Круглые скобки используются для группирования в привычной манере.
     Утилита expr не делает лексического различия между аргументами, которые
     могут быть операторами и аргументами, которые могут являться операндами.
     Операнд, лексически идентичный оператору будет рассматриваться, как син-
     таксическая ошибка.  Смотрите примеры ниже для обходного пути.

     Синтаксис команды expr в общем является исторически сложившимся и неудоб-
     ным.  В новых приложениях вместо expr рекомендуется использовать арифме-
     тику командного интерпретатора.
   Совместимость с предыдущими реализациями
     Если не включена совместимость с FreeBSD 4.x, эта версия expr придержива-
     ется указаний к синтаксису утилит, определенных в POSIX, которые требуют,
     чтобы ведущий аргумент, начинающийся со знака минус рассматривался, как
     опция к программе.  Стандартная синтаксическая структура -- может быть
     использована для предотвращения такой обработки.  Тем не менее, многие из
     ранних версий expr, включая ту, что была в предыдущих версиях FreeBSD, не
     разрешали использовать данный синтаксис.  Смотрите ниже примеры переноси-
     мых способов для гарантирования корректной интерпретации.  Чтобы опреде-
     лить, должен ли быть активирован режим совместимости, используется функ-
     ция check_utility_compat(3) (где в качестве аргумента utility использу-
     ется ``expr'').  Эта возможность предназначена для использования в каче-
     стве вспомогательного средства при переносе и отладке, когда expr исполь-
     зуется в сложных сценариях, которые не могут быть легко переделаны так,
     чтобы избежать использования непереносимых конструкций.  Включение режима
     совместимости также косвенно активирует опцию -e, так как это соответ-
     ствует историческому поведению expr во FreeBSD.  По историческим причи-
     нам, установка переменной окружения EXPR_COMPAT также включает режим сов-
     местимости.

ОКРУЖЕНИЕ
     EXPR_COMPAT  Если переменная определена, включить режим совместимости.
СТАТУС ЗАВЕРШЕНИЯ
     Утилита expr завершается с одним из следующих статусов:
     0       Выражение не является ни пустой строкой, ни нулем.
     1       Выражение является пустой строкой или нулем.
     2       Выражение некорректно.

ПРИМЕРЫ
        В следующем примере (используется синтаксис sh(1)) добавляется еди-
         ница к переменной a:
               a=$(expr $a + 1)
        Эта команда не выполнится, если значение a является отрицательным
         числом.  Чтобы предотвратить обработку отрицательных значений a в
         качестве опций команде expr можно преобразовать выражение так:
               a=$(expr 1 + $a)

        В общем случае, заключайте в скобки возможные отрицательные значения:
               a=$(expr \( $a \) + 1)
        В этом примере выводится имя файла, вычлененного из пути, хранящегося
         в переменной a.  Так как a может содержать путь /, то необходимо
         предотвратить его обработку в качестве оператора деления.  Пара сим-
         волов // разрешает эту неоднозначность.
               expr "//$a" : '.*/\(.*\)'

     В следующих примерах выводится количество символов в переменной a.  И
     снова, если a может начинаться с дефиса, то необходимо предотвратить его
     обработку в качестве опции к expr.
        Если команда expr удовлетворяет стандарту IEEE Std 1003.1-2001
         (``POSIX.1''), то сделать это просто:
               expr -- "$a" : ".*"

        Для переносимости на более старые системы требуется более сложная
         команда:
               expr \( "X$a" : ".*" \) - 1
СМОТРИ ТАКЖЕ
     sh(1), test(1), check_utility_compat(3)

СТАНДАРТЫ
     Утилита expr соответствует стандарту IEEE Std 1003.1-2001 (``POSIX.1''),
     если не активирован режим совместимости.  Флаг -e является расширением
     стандарта.
FreeBSD 6.2                      12 июля 2004                      FreeBSD 6.2
Ваша оценка: Нет Средняя: 5 (2 голоса)

Вставай, Україно!

Литература