ksh에는 동일한 이름을 가진 두 개의 변수가 있습니다. 하나는 전역 변수이고 다른 하나는 함수 로컬 변수입니다.
#!/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의 변수 범위
케시는동적 범위 지정이므로 변수가 선언된 함수가 호출하는 함수에서도 변수에 액세스할 수 있습니다. 이것은매뉴얼의 기능 섹션. AT&T ksh에서는(pdksh 및 그 파생물, bash 및 zsh의 유사한 기능과 반대)
발췌매개변수: 개요
변수를 읽거나 설정할 때 zsh는 현재 함수에서 변수가 존재하는지 확인합니다. 그렇지 않은 경우 다음으로 가장 바깥쪽 함수를 찾는 식으로 전역(가장 바깥쪽) 범위에 도달할 때까지 계속됩니다. 따라서 존재하지 않는 변수에 값을 할당하면 해당 변수는 가장 바깥쪽 범위에 생성됩니다. (새 매개변수를 내보내는 경우에도 이 효과가 있습니다.)