Пакетный скрипт — локальные VS глобальные переменные

Опубликовано: 30 Сентября, 2022

В этой статье мы увидим различия между локальными и глобальными переменными в сценариях 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!!