Zsh 循环中的函数声明不';t评估变量

Zsh 循环中的函数声明不';t评估变量,zsh,Zsh,我试图在批处理中使用for循环定义一个zsh函数。我希望得到不同的函数,例如,pre1post,pre2post等,每个函数都引用函数创建时变量的值 通过我的尝试,我正确地得到了函数名,但是循环中使用的值引用了数组中的最后一个值(好像它是一个全局变量?) 如何在每个定义的函数中保存变量的当前值 DESCRIPTORS=("1" "2" "3") for i in $DESCRIPTORS; do function "pre"$i"post"() { echo i=$i

我试图在批处理中使用for循环定义一个zsh函数。我希望得到不同的函数,例如,
pre1post
pre2post
等,每个函数都引用函数创建时变量的值

通过我的尝试,我正确地得到了函数名,但是循环中使用的值引用了数组中的最后一个值(好像它是一个全局变量?)

如何在每个定义的函数中保存变量的当前值

DESCRIPTORS=("1" "2" "3")

for i in $DESCRIPTORS; do
    function "pre"$i"post"() {
        echo i=$i

        local j=$i
        echo j=$j

        eval "k=$i; echo k=$k"
        echo p=${(P)ENV_DESCR}

        eval "value=\"\${$ENV_DESCR}\""
        echo v="$value"

    }
done;

> pre1post
i=3
j=3
k=
p=
v=

函数体中对
i
的引用是在调用函数时计算的,而不是在定义函数时计算的
zsh
不提供闭包。有关详细信息,请参阅。

不要使用
#/bin/bash
用于一个打算由
zsh
执行的脚本。这一点很好,虽然不会改变结果(我只是在试验东西)