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.