我正在尝试使用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=
答案 0 :(得分:1)
对函数中的i
的引用是在调用时评估的,而不是在定义函数时评估的。 zsh
不提供闭包。有关更多信息,请参见Is there something like closures for zsh?。