循环中的函数声明不计算变量 [英] Function declaration in a loop doesn't evaluate the variable

查看:8
本文介绍了循环中的函数声明不计算变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用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=

推荐答案

对正文中i的引用在调用时求值,而不是在定义函数时求值。zsh不提供闭包。有关详细信息,请参阅Is there something like closures for zsh?

这篇关于循环中的函数声明不计算变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆