我有一个 zsh 函数,如下所示:
outer_func () {
local LOCAL_VAR='test'
inner_func () {
echo "${LOCAL_VAR}"
}
}
哪里$LOCAL_VAR
不可用inner_func
。
我知道我可以使用eval
to 定义,inner_func
以便它可以访问 的值$LOCAL_VAR
,我想知道是否还有其他方法可以做到这一点?
编辑:在 zsh 5.8 上测试:
$ cat test.zsh
outer_func () {
local LOCAL_VAR='test'
inner_func () {
echo "${LOCAL_VAR}"
}
}
echo 'executing outer_func'
outer_func
echo 'executing inner_func'
inner_func
$ ./test.zsh
executing outer_func
executing inner_func
$
编辑2:澄清:我实际上用来outer_func
将变量设置为一系列inner_func
s,这对于s的工作至关重要inner_func
,并且在定义后outer_func
,我需要调用inner_func
s。
答案1
Zsh 中不存在“内部函数”这样的东西。你outer_func
所做的是,每次调用它时,它都会创建一个inner_func
公开可用的普通函数(并且将覆盖任何名为 的现有函数inner_func
)。然而,你outer_func
实际上并没有称呼 inner_func
。它只是创造它。
您可能想要的是这样的:
outer_func () {
local LOCAL_VAR='test'
inner_func
}
inner_func () {
echo "${LOCAL_VAR}"
}
然后,当你调用时outer_func
,结果将是inner_func
回声test
。
PS:您不需要在那里使用局部变量。你可以只使用位置参数反而:
outer_func() {
inner_func 'test'
}
inner_func() {
print - "$1"
}