Пакетный скрипт — локальные VS глобальные переменные
В этой статье мы увидим различия между локальными и глобальными переменными в сценариях bash.
Переменная: имя, присвоенное ячейке памяти, которая используется для хранения значений в программе, называется переменная. Он хранит информацию, которую можно вызывать и манипулировать в любом месте программы.
Область действия: Часть или область программы, в которой переменная доступна или считается активной.
В зависимости от области действия переменной она бывает двух типов:
Локальная переменная: те переменные, область действия которых находится внутри функции, в которой она объявлена (доступ к ним можно получить в объявленном блоке или функции в программе)
Глобальная переменная: доступ к этим переменным возможен глобально во всей программе.
Локальная VS Глобальная переменная:
| Локальная переменная | Глобальная переменная |
|---|---|
| Ключевое слово local используется для объявления локальной переменной. | Ключевое слово не используется. |
| Он объявлен внутри функции | Его можно объявить вне функции в любом месте программы. |
| Это не доказывает обмен данными | Обеспечивает обмен данными |
| Они хранятся в стеке | Эти переменные сохраняются компилятором в фиксированной ячейке памяти. |
| Передача параметров обязательна | Передача параметров не требуется |
| Значение мусора сохраняется, если оно не инициализировано. | Ноль сохраняется по умолчанию, если он не инициализирован. |
| При изменении внутри одной функции эта модификация не будет отражена в другой функции. | Если изменить одну функцию, эта модификация будет видна во всей программе. |
Преимущества использования локальной переменной
- Это гарантирует, что значения переменных останутся неизменными во время выполнения задачи.
- В многозадачных средах, где каждая задача может изменить значение переменной. Это не приведет к нежелательным результатам, поскольку каждая задача может создать свой собственный экземпляр локальной переменной.
- Одно и то же имя переменной может использоваться в разных задачах.
- Он освобождает память, как только запускается.
Недостатки использования локальной переменной
- Это делает отладку сложным процессом.
- Из-за ограничения обмена данными между модулями общие данные необходимо передавать повторно.
- У них очень ограниченная область применения.
Преимущества использования глобальной переменной
- Доступ к нему возможен из всех функций или модулей программы.
- Нужно объявить глобальную переменную только один раз вне модулей.
- Он используется для хранения постоянных значений для обеспечения согласованности.
- Это полезно, когда многие функции имеют доступ к одним и тем же данным.
Недостаток использования глобальной переменной
- Все глобальные переменные, объявленные внутри программы, остаются в памяти до завершения выполнения. Это может вызвать проблемы с нехваткой памяти.
- Модификация данных проста, они могут быть легко изменены любой задачей или функцией. Это может привести к нежелательным результатам в многозадачных средах.
- Прекращение использования глобальной переменной из-за рефакторинга вызовет проблему изменения всех связанных модулей.
Давайте рассмотрим пример, чтобы лучше понять глобальные и локальные переменные.
Функция
Функция — это набор команд, которые можно вызывать несколько раз. Он используется, чтобы избежать написания одного и того же блока кода снова и снова.
Синтаксис:
function_name () {
commands
}
OR
function function_name {
commands
}Оба формата написания функций корректны в сценариях bash.
Пример 1: Создание локальной переменной
Локальная переменная объявляется с использованием ключевого слова перед именем переменной
#!/bin/bash
function first () {
local x="HelloNew"
echo "Inside first function x=$x"
}
first
echo "Outside first function x = $x"Выход:
Inside first function x=HelloNew Outside first function x =
Пример 2: Создание глобальной переменной
#!/bin/bash
function first () {
x="Hello Geek"
echo "Inside first function x= $x"
}
first
echo "Outside first function x = $x"Выход:
Inside first function x=Hello Geek Outside first function x = Hello Geek
Пример 3: Несколько локальных и глобальных переменных в программе
#!/bin/bash
function first () {
local x="Hello Geek"
local y= "Enjoy"
echo "Inside first function x= $x"
echo "Inside first function y= $y"
}
x="Hello Romy"
y="good to see you!"
first
echo "Outside first function x = $x"
echo "Outside first function y= $y"Выход:
Inside first function x= Hello Geek Inside first function y= Outside first function x = Hello Romy Outside first function y= good to see you!
Перезапись переменной
См. пример ниже:
#!/bin/bash
x="Hellooooo!!"
echo " Outside first function x =$x"
function first () {
x="Hello Geek"
}
first
echo "After overwriting, x = $x"Выход:
Outside first function x =Hellooooo!! After overwriting, x = Hello Geek
Из примера видно, что значение x перезаписывается. Чтобы предотвратить перезапись переменных, мы можем сделать нашу переменную доступной только для чтения, написав 'declare -r' перед объявлением переменной.
Пример:
#!/bin/bash
x="Hellooooo!!"
echo " Outside first function x =$x"
function first () {
declare -r x="Hello Geek"
}
first
echo "After overwriting, x = $x"Выход:
Outside first function x =Hellooooo!! After overwriting, x = Hellooooo!!