Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Назначение

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



[я @ linuxbox ~] $ foo =

[я @ linuxbox ~] $ эхо $ foo


[я @ linuxbox ~] $ если ((foo = 5)); затем echo «Это правда.»; фи

Это правда.

[я @ linuxbox ~] $ эхо $ foo

5

[я @ linuxbox ~] $ foo =

[я @ linuxbox ~] $ эхо $ foo


[я @ linuxbox ~] $ если ((foo = 5)); затем echo «Это правда.»; фи

Это правда.

[я @ linuxbox ~] $ эхо $ foo

5


В приведенном выше примере мы сначала присваиваем пустое значение переменной Foo и убедитесь, что он действительно пустой. Далее мы выполняем if с составной командой ((foo = 5

)). Этот процесс делает две интересные вещи: 1) он присваивает переменной значение 5.

foo, и 2) он оценивается как истина, потому что foo было присвоено ненулевое значение.


Примечание: Важно помнить точное значение = в выражении выше. Один = выполняет задание. фу = 5 говорит «сделать Foo равно 5 », а == оценивает эквивалентность. фу == 5 говорит «делает Foo равно 5? » Это обычная особенность многих языков программирования. В оболочке это может немного сбивать с толку, потому что тестXNUMX команда принимает один = для эквивалентности строк. Еще одна причина использовать более современные [[]] и (()) составные команды вместо тестXNUMX.


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


Таблица 34-4: Операторы присваивания


Обозначение Описание

Обозначение Описание


параметр = ценностное Простое задание. Назначает ценностное в параметр.


параметр += ценностное Добавление. Эквивалентно параметр = параметр +

значения.


параметр -= ценностное Вычитание. Эквивалентно параметр = параметр

значения.


параметр *= ценностное Умножение. Эквивалентно параметр = параметр

* значения.


параметр /= ценностное Целочисленное деление. Эквивалентно параметр =

параметр / значение.


параметр %= ценностное По модулю. Эквивалентно параметр = параметр %

значения.


параметр++ Переменный пост-инкремент. Эквивалентно параметр =

параметр + 1 (однако см. обсуждение ниже).


параметр−− Переменный постдекремент. Эквивалентно параметр =

параметр - 1.


++параметр Переменный предварительный инкремент. Эквивалентно параметр =

параметр + 1.


--параметр Переменный пре-декремент. Эквивалентно параметр =

параметр - 1.



Эти операторы присваивания обеспечивают удобное сокращение для многих распространенных арифметических задач. Особый интерес представляют инкремент (++) и декремент (-) операторы, увеличивающие или уменьшающие значение своих параметров на единицу. Этот стиль обозначений взят из языка программирования C и был включен в ряд других языков программирования, включая колотить.

Операторы могут появляться либо перед параметром, либо в конце. Хотя оба они либо увеличивают, либо уменьшают параметр на единицу, у этих двух мест размещения есть небольшая разница. Если он помещен в начало параметра, параметр увеличивается (или уменьшается) до того, как параметр будет возвращен. Если ставить после, операция выполняется после параметр возвращается. Это довольно странно, но это предполагаемое поведение. Вот демонстрация:



[я @ linuxbox ~] $ foo = 1 [я @ linuxbox ~] $ эхо $ ((foo ++)) 1

[я @ linuxbox ~] $ эхо $ foo

[я @ linuxbox ~] $ foo = 1 [я @ linuxbox ~] $ эхо $ ((foo ++)) 1

[я @ linuxbox ~] $ эхо $ foo


2

2


Если присвоить переменной значение единицы Foo а затем увеличьте его с помощью ++ оператор помещается после имени параметра, Foo возвращается со значением один. Однако, если мы посмотрим на значение переменной во второй раз, мы увидим увеличенное значение. Если мы разместим ++ оператор перед параметром, мы получаем более ожидаемое поведение:


[я @ linuxbox ~] $ foo = 1 [я @ linuxbox ~] $ эхо $ ((++ фу)) 2

[я @ linuxbox ~] $ эхо $ foo

2

[я @ linuxbox ~] $ foo = 1 [я @ linuxbox ~] $ эхо $ ((++ фу)) 2

[я @ linuxbox ~] $ эхо $ foo

2


Для большинства приложений оболочки использование префикса оператора будет наиболее полезным.

Операторы ++ и - часто используются вместе с циклами. Мы внесем некоторые улучшения в наш скрипт по модулю, чтобы немного его сжать:



#! / Bin / Баш

# modulo2: продемонстрировать оператор по модулю для ((i = 0; i <= 20; ++ я )); делать

если (((я% 5) == 0)); затем printf "<% d>" $ i

еще

printf "% d" $ i

фи сделано

printf "\ n"

#! / Bin / Баш

# modulo2: продемонстрировать оператор по модулю для ((i = 0; i <= 20; ++ я )); делать

если (((я% 5) == 0)); затем printf "<% d>" $ i

еще

printf "% d" $ i

фи сделано

printf "\ n"


Лучшие облачные вычисления для ОС в OnWorks: