ksh의 범위 지정 변수

ksh의 범위 지정 변수

ksh에는 동일한 이름을 가진 두 개의 변수가 있습니다. 하나는 global이고 다른 하나는 함수에 로컬입니다.

#!/bin/ksh

LOG_FILE=lf

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

exec_script 함수 내에서 전역 변수 $LOG_FILE을 참조하려면 로컬이 참조되지 않도록 어떻게 한정해야 합니까?

답변1

나는 당신이 할 수 있다고 생각하지 않습니다. 변수의 범위를 찾을 때 Ksh가 환경을 조사하는 방법의 한계라고 생각합니다.

에서 발췌KSH의 변수 범위

Ksh는동적 범위 지정이므로 변수를 선언하는 함수에 의해 호출되는 함수에서도 변수에 액세스할 수 있습니다. 이는 다음 문서에 간략하게 기록되어 있습니다.매뉴얼의 기능 섹션. AT&T ksh에서는(pdksh 및 파생 상품, bash 및 zsh의 유사한 기능과 반대)

발췌매개변수: 개요

변수를 읽거나 설정할 때 zsh는 현재 함수에서 해당 변수가 존재하는지 확인합니다. 그렇지 않은 경우 전역(가장 바깥쪽) 범위에 도달할 때까지 다음으로 가장 바깥쪽 함수를 찾는 식으로 계속됩니다. 따라서 존재하지 않는 변수에 값을 할당하면 해당 변수는 가장 바깥쪽 범위에 생성됩니다. (새 매개변수를 내보내는 경우에도 이 효과가 있습니다.)

관련 정보