Ответ
В 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 и захватывайте их с помощью$().