В 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 смотрит в текущую функцию, чтобы узнать, существует ли эта переменная. Если нет, он смотрит в следующую самую внешнюю функцию и так далее, пока не достигнет глобальной (самой внешней) области действия. Поэтому, если вы присваиваете значение переменной, которая не существует, переменная создается в самой внешней области действия. (Экспорт нового параметра также имеет такой эффект.)