循环中的函数声明不求值变量

问题描述 投票:0回答:1

我正在尝试使用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=
zsh
1个回答
0
投票

对正文中i的引用是在被调用函数而不是在定义函数时评估的。 zsh不提供闭包。

© www.soinside.com 2019 - 2024. All rights reserved.