我正在尝试使用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
不提供闭包。