Как ограничить видимость переменной между двумя функциями в скрипте на Bash?

«Как ограничить видимость переменной между двумя функциями в скрипте на Bash?» — вопрос из категории Скриптинг и автоматизация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример:

#!/bin/bash

function first_func() {
    local secret_var="Это видно только в first_func"
    echo "Inside first_func: $secret_var"
    second_func
}

function second_func() {
    # Эта переменная существует независимо от secret_var в first_func
    local secret_var="Это видно только в second_func"
    echo "Inside second_func: $secret_var"
    # Попытка обратиться к переменной из first_func приведет к пустому значению
    echo "Trying to access first_func's var: ${secret_var_from_first:-'Variable not found'}"
}

# Глобальная переменная
global_var="Я глобальная"

echo "Global: $global_var"
first_func
echo "Global after calls: $global_var"
# Следующая строка вызовет ошибку или покажет пустоту, если переменная не объявлена глобально
# echo "Outside: $secret_var"

Вывод скрипта:

Global: Я глобальная
Inside first_func: Это видно только в first_func
Inside second_func: Это видно только в second_func
Trying to access first_func's var: Variable not found
Global after calls: Я глобальная

Ключевые моменты для автоматизации:

  • local — основа инкапсуляции в функциях Bash.
  • Без local переменная становится глобальной и может быть случайно изменена другой функцией.
  • Для передачи данных между функциями используйте аргументы ($1, $2) или возвращайте значения через stdout и захватывайте их с помощью $().