zsh - ошибка раскрытия переменной во вложенных функциях - PullRequest
0 голосов
/ 22 марта 2020

Я определил вложенную функцию в моем .zshrc, надеясь определить несколько похожих zsh функций:

makefunc_gman () {
    local MAN_SEC_LIST=(1 2 3 4 5 6 7 8) 
    for GMAN_SEC in ${MAN_SEC_LIST}
    do
        "gman${GMAN_SEC}" () {
            gdir_C "$1" "man${GMAN_SEC}" 
        }
    done
}

makefunc_gman # calls the function
  • Функции, которые я хотел определить выше: gman1, * От 1007 * до gman8.
  • Я хочу получить функцию с именем gman1, которая после получения этой функции вызывает gdir_C "$1" man1.
  • gdir_C в коде - это другая функция, определенная в .zshrc.

Но когда я получил .zshrc, where gman1 дал мне это:

$ where gman1        
gman1 () {
    local MAN_GMAN_SEC="man${GMAN_SEC}" 
    gdir_C "$1" "man${GMAN_SEC}"
}

Казалось, что переменная $GMAN_SEC в этой вложенной функции не раскрывается. Как получить переменную для правильного расширения? Спасибо!

1 Ответ

1 голос
/ 22 марта 2020

Вам нужно будет использовать eval, так как zsh не имеет вложенных областей или замыканий.

makefunc_gman () {
    local MAN_SEC_LIST=(1 2 3 4 5 6 7 8) 
    for GMAN_SEC in ${MAN_SEC_LIST}
    do
        eval "gman${GMAN_SEC} () {
            gdir_C \"\$1\" man${GMAN_SEC}
        }"
    done
}
...