Você não pode portá-lo. A especificação POSIX não especificou nenhuma maneira de despejar a definição de função, nem como as funções são implementadas.
Em bash , você não precisa exportar a função para o ambiente, você pode usar:
declare -f funcname
(Trabalhar em zsh )
Isso funciona mesmo quando você executa bash no modo posix :
$ bash --posix -c 'y(){ echo z; }; declare -f y'
y ()
{
echo z
}
Em ksh :
typeset -f funcname
(Funciona em bash , zsh , mksh , pdksh , lksh )
Em yash :
typeset -fp funcname
Isso não funcionará se yash entrar modo POSIXly-correto :
$ yash -o posixly-correct -c 'y() { ehco z; }; typeset -fp y'
yash: no such command 'typeset'
com zsh :
print -rl -- $functions[funcname]
whence -f funcname
type -f funcname
which funcname
Observe que whence -f , which , type -f reportará o alias primeiro com o mesmo nome. Você pode usar -a para fazer zsh relatar todas as definições.
POSIXly, você teria que gravar sua definição de função que você poderia fazer com:
myfunction_code='myfunction() { echo Hello World; }'
eval "$myfunction_code"
ou uma função auxiliar
defn() {
code=$(cat)
eval "${1}_code=\$code; $1() { $code; }"
}
defn myfunction << 'EOF'
echo Hello World
EOF
printf '%s\n' "$myfunction_code"