次のzsh機能があります。
outer_func () {
local LOCAL_VAR='test'
inner_func () {
echo "${LOCAL_VAR}"
}
}
$LOCAL_VAR
利用できないところinner_func
。
aを使用して値にアクセスできるようにeval
定義できることを知っています。これを行う別の方法があるかどうか疑問に思います。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
$
outer_func
編集2:説明:実際に変数を一連のsに設定するために使用していますinner_func
。これはsが機能するために重要であり、inner_func
定義された後にsをouter_func
呼び出す必要がありますinner_func
。
答え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
echoになりますtest
。
PS:そこではローカル変数を使用する必要はありません。ただ使えます位置パラメータ代わりに:
outer_func() {
inner_func 'test'
}
inner_func() {
print - "$1"
}