mlgrassi
(usa Debian)
Enviado em 18/07/2017 - 17:24h
Muito obrigado !
Este link me ajudou, e assim compartilho com os visitantes do VOL a resposta à minha pergunta.
Quando declaramos uma função, o shell irá criar e popular um vetor padrão denominado
FUNCNAME o qual terá a quantidade de índices e valores criados de acordo com as seguintes situações:
1) Se a função é declarada diretamente no terminal do shell
A quantidade de índices será igual ao número de funções declaradas individualmente, ou seja, se tivermos por exemplo 3 funções declaradas, como logicamente são executadas sequencialmente, a cada chamada o shell irá criar um vetor com 1 índice e atribuir como valor o nome da função.
Se uma função estiver dentro de outra função e assim sucessivamente, o número de índices será proporcional a isso
2) Se a função estiver dentro de um script
A quantidade de índices será igual ao número de funções individuais declaradas, ou funções dentro de funções + 1.
Esse +1 refere-se a função oculta main utilizada quando se executam scripts shell.
Ao exibirmos todo o conteúdo de FUNCNAME:
echo ${FUNCNAME[@]} serão exibidas todas as funções em ordem decrescente + a função main.
No entanto, como falado anteriormente, para cada função, há um FUNCNAME diferente sendo que a quantidade de índices será sempre 2, exceto para caso houver uma função dentro da outra.
Segue um exemplo para entendermos melhor
Exemplo:
function primeira {
echo "Imprimindo ${FUNCNAME[@]}";
}
function segunda {
echo "Imprimindo ${FUNCNAME[@]}";
primeira;
}
function externa {
echo "Imprimindo ${FUNCNAME[@]}";
function interna {
echo "Imprimindo ${FUNCNAME[@]}";
}
interna;
}
primeira;
segunda;
externa;
Executando este código através de um script a saída será:
Imprimindo primeira main
Imprimindo segunda main
Imprimindo primeira segunda main
Imprimindo externa main
Imprimindo interna externa main
Agora executando o mesmo código diretamente no terminal shell, a saída será:
Imprimindo primeira
Imprimindo segunda
Imprimindo primeira segunda
Imprimindo externa
Imprimindo interna externa