Отправляет email-рассылки с помощью сервиса Sendsay

Программирование на shell и awk

  Все выпуски  

О роли условной единицы ($) - I


Информационный Канал Subscribe.Ru

Выпуск #10

О роли условной единицы ($) - I

Символ $ обозначает

  • подстановку значений параметров,
а в bash еще и
  • подстановку результатов выполнения команд,
  • подстановку значений арифметических выражений.

Подстановка значений арифметических выражений

При вычислении арифметических выражений вместо выражения подставляется результат его вычисления. Для вычисления арифметических выражений используется следующий формат:

$((выражение))

или

$[выражение]

Выражение обрабатывается так, как если бы оно было взято в двойные кавычки, но двойные кавычки в самом выражении не имеют специального значения. Во всех лексемах выражения выполняется подстановка значений параметров, подстановка строк, подстановка результатов выполнения команд и удаление кавычек. Вычисления арифметических выражений могут быть вложенными:

$ echo $((2**2 + $((3+3)) % 4))
6
                                                              Пример 10.1
Вычисление выполняется по правилам, перечисленным ниже. Если выражение недопустимо, то командный интерпретатор bash выдает сообщение о невозможности вычисления и завершает выполнение команды с ненулевым статусом возврата.

Вычисление арифметических выражений выполняется в длинных целых числах без проверки переполнения, хотя деление на 0 перехватывается и выдается соответствующее сообщение об ошибке. Операторы в следующем списке сгруппированы по уровням с одинаковым приоритетом. Уровни перечислены в порядке убывания приоритета.

id++ id––
постфиксное увеличение/уменьшение значения переменной на 1
++id ––id
префиксное увеличение/уменьшение значения переменной на 1
– +
унарные минус и плюс
! ~
логическое и побитовое отрицание
**
возведение в степень
* / %
умножение, деление, получение остатка от деления
+ –
сложение, вычитание
<< >>
побитовый сдвиг влево и вправо
<= >= < >
сравнение
== !=
равенство и неравенство
&
побитовое И
^
побитовое исключающее ИЛИ
|
побитовое ИЛИ
&&
логическое И
||
логическое ИЛИ
выражение?выражение:выражение
условное вычисление
= *= /= %= += –=
присваивание
выражение1,выражение2
запятая

В качестве операндов можно использовать переменные командного интерпретатора, так как перед вычислением выполняется подстановка значений параметров. Значение параметра в арифметическом выражении приводится к длинному целому:

$ a=4; echo $[a=$a+4] $[a+=4] $[a=a+4]
8 12 16

$ a=4; echo $[a=$a+4, a+=4, a=a+4]
16
                                                              Пример 10.2
Результатом логической операции будет 0 (ложь) или 1 (истина):
$ echo $[2!=2] $[2!=3]
0 1

$ echo $[a=2<3] $a
1 1
                                                              Пример 10.3
Константы с начальным 0 интерпретируются как восьмеричные числа. Начальные 0x или 0X обозначают шестнадцатеричную константу. В остальных случаях числа имеют вид:

[основание#]n

где основание — десятичное число от 2 до 64, представляющее основание системы счисления, а n — число в этой системе счисления. Если основание не указано, используется основание 10. Цифры, большие 9, представляются строчными буквами, прописными буквами, символами _ и @, именно в таком порядке. Если основание меньше или равно 36, прописные и строчные буквы эквивалентны и используются для представления чисел от 10 до 35:

$ echo $[2#101] $[10#101] $[16#101]
5 101 257

$ echo $[16#FF] $[16#ff] $[0xFF]
255 255 255

$ echo $[64**2] $[64#@@]
4096 4095

$ echo $[64#z] $[64#Z]
35 61
                                                              Пример 10.4
Операторы вычисляются в порядке приоритетов. Сначала вычисляются подвыражения в круглых скобках, которые позволяют переопределить представленные выше стандартные приоритеты операторов:
$ echo $(( 2**2 + (3+3)%4 ))
6

$ echo $[(a=2)<3] $a
1 2
                                                              Пример 10.5

Подстановка результатов выполнения команд

Об этой подстановке я рассказывал в седьмом выпуске рассылки.

Подстановка значений параметров

Этой подстановке будет посвящен следующий выпуск рассылки.
Ведущий рассылки Big Shadow

Архив рассылки находится на http://subscribe.ru/archive/comp.soft.prog.shellandawk/



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное