다음과 같은 zsh 기능이 있습니다.
outer_func () {
local LOCAL_VAR='test'
inner_func () {
echo "${LOCAL_VAR}"
}
}
$LOCAL_VAR
이용할 수 없는 곳 inner_func
.
a를 사용하여 값에 액세스할 수 있도록 eval
정의 할 수 있다는 것을 알고 있습니다 . 이를 수행하는 다른 방법이 있는지 궁금합니다.inner_func
$LOCAL_VAR
편집: zsh 5.8에서 테스트되었습니다.
$ cat test.zsh
outer_func () {
local LOCAL_VAR='test'
inner_func () {
echo "${LOCAL_VAR}"
}
}
echo 'executing outer_func'
outer_func
echo 'executing inner_func'
inner_func
$ ./test.zsh
executing outer_func
executing inner_func
$
outer_func
편집 2: 설명: 실제로 변수를 일련의 s로 설정하는 데 사용하고 있습니다 inner_func
. 이는 s가 작동하는 데 중요하며 inner_func
정의된 후에는 s를 outer_func
호출해야 합니다 inner_func
.
답변1
Zsh에는 "내재적 기능"이라는 것이 없습니다. 당신이 outer_func
하는 일은 호출할 때마다 inner_func
공개적으로 사용 가능한 일반 함수를 생성하는 것입니다(그리고 이름이 지정된 기존 함수를 덮어씁니다 inner_func
). 그러나 outer_func
실제로는 그렇지 않습니다.부르다 inner_func
. 단지 그것을 창조할 뿐입니다.
아마도 당신이 원하는 것은 다음과 같습니다:
outer_func () {
local LOCAL_VAR='test'
inner_func
}
inner_func () {
echo "${LOCAL_VAR}"
}
그런 다음 호출하면 outer_func
결과는 inner_func
echo 가 됩니다 test
.
추신: 거기에서는 지역 변수를 사용할 필요가 없습니다. 그냥 사용할 수 있습니다위치 매개변수대신에:
outer_func() {
inner_func 'test'
}
inner_func() {
print - "$1"
}