Область действия переменных в ksh

Область действия переменных в ksh

В ksh у меня есть две переменные с одинаковыми именами, одна глобальная, другая локальная по отношению к функции.

#!/bin/ksh

LOG_FILE=lf

function exec_script
{
   local LOG_FILE=f
   print $LOG_FILE
}
exec_script
print $LOG_FILE

Если я хочу сослаться на глобальную переменную $LOG_FILE внутри функции exec_script, как мне ее квалифицировать, чтобы не ссылаться на локальную?

решение1

Я не думаю, что вы можете это сделать. Я думаю, это ограничение того, как Ksh опрашивает окружение при поиске области действия переменной.

выдержка изОбласть действия переменных в KSH

Кш имеетдинамическое определение области действия, поэтому переменная также доступна в функциях, которые вызываются функцией, объявляющей переменную. Это кратко документировано враздел о функциях в руководстве. Обратите внимание, что в AT&T ksh (в отличие от pdksh и производных, а также схожих функций bash и zsh),

выдержкаПараметры: Обзор

Когда вы считываете или устанавливаете переменную, zsh смотрит в текущую функцию, чтобы узнать, существует ли эта переменная. Если нет, он смотрит в следующую самую внешнюю функцию и так далее, пока не достигнет глобальной (самой внешней) области действия. Поэтому, если вы присваиваете значение переменной, которая не существует, переменная создается в самой внешней области действия. (Экспорт нового параметра также имеет такой эффект.)

Связанный контент