Zsh 循环中的函数声明不';t评估变量
我试图在批处理中使用for循环定义一个zsh函数。我希望得到不同的函数,例如,Zsh 循环中的函数声明不';t评估变量,zsh,Zsh,我试图在批处理中使用for循环定义一个zsh函数。我希望得到不同的函数,例如,pre1post,pre2post等,每个函数都引用函数创建时变量的值 通过我的尝试,我正确地得到了函数名,但是循环中使用的值引用了数组中的最后一个值(好像它是一个全局变量?) 如何在每个定义的函数中保存变量的当前值 DESCRIPTORS=("1" "2" "3") for i in $DESCRIPTORS; do function "pre"$i"post"() { echo i=$i
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
不提供闭包。有关详细信息,请参阅。不要使用#/bin/bash
用于一个打算由zsh
执行的脚本。这一点很好,虽然不会改变结果(我只是在试验东西)