循环中的函数声明不评估变量

时间:2019-10-17 20:34:55

标签: zsh

我正在尝试使用for循环批量定义zsh函数。我希望获得不同的功能,例如pre1postpre2post等,每个都引用函数创建时的变量值。

从我的尝试中,我正确地获得了函数的名称,但是循环中使用的值引用了数组中的最后一个值(就像它是全局变量一样?)。

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

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=

1 个答案:

答案 0 :(得分:1)

对函数中的i的引用是在调用时评估的,而不是在定义函数时评估的。 zsh不提供闭包。有关更多信息,请参见Is there something like closures for zsh?