循环中的函数声明不计算变量 [英] Function declaration in a loop doesn't evaluate the variable
本文介绍了循环中的函数声明不计算变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用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
不提供闭包。有关详细信息,请参阅Is there something like closures for zsh?。
这篇关于循环中的函数声明不计算变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文