Primeiro, observe que a sintaxe de definição de função em zsh , como no shell Bourne, é:
funcname() cmd
(embora também suporte a sintaxe do ksh function funcname {...} e alguns outros).
fun não é uma palavra-chave de sintaxe zsh . Com fun foo() cmd , você define as funções fun e foo com cmd como corpo.
Eu também recomendaria contra o uso de test como o nome de uma função, pois test é o nome de um comando padrão (um embutido em zsh e a maioria dos outros shells semelhantes a Bourne).
Aqui, se você quiser uma função com uma variável local com um valor fixo, será necessário incorporar esse valor na definição da função:
mytest() {
local variable=test
echo $variable
}
variable será local para a função, mas ainda visível para as outras funções chamadas por mytest , se houver. Se preferir que ele fique oculto para outras funções, ou seja, para escopo estático, você pode usar private (no módulo zsh/param/private ) em vez de local .
Se você quiser que valor fixo seja o valor da variável global $variable no momento da definição de mytest , ainda será necessário incorporá-lo à definição, algo como:
zmodload zsh/param/private
eval '
mytest() {
private variable='${(qq)variable}'
echo $variable
otherfunction ...
}
'
Onde incorporamos o conteúdo da variável (devidamente citada com ${(qq)...} ) na definição.