zsh - "eval"을 사용하여 정의되지 않은 내부 함수에 지역 변수를 사용할 수 있게 만드는 방법은 무엇입니까?

zsh - "eval"을 사용하여 정의되지 않은 내부 함수에 지역 변수를 사용할 수 있게 만드는 방법은 무엇입니까?

다음과 같은 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_funcecho 가 됩니다 test.


추신: 거기에서는 지역 변수를 사용할 필요가 없습니다. 그냥 사용할 수 있습니다위치 매개변수대신에:

outer_func() {
  inner_func 'test'
}

inner_func() {
  print - "$1"
}

관련 정보