Uma outra opção em vez do unset
: quando tenho funções com variáveis que posso descartar imediatamente, eu utilizo a sintaxe funcao() ( comando1; comando2; )
que é inclusive prevista na POSIX (suportada também por shells mais simples como dash
, mksh
, etc.). Ela roda o código da função num shell paralelo, sem mexer no que está rodando atualmente.
No tópico que eu fiz com o mesmo propósito, você vê que todas as minhas funções que mexem com variáveis são “insuladas” assim.
cppwr() ( # em vez de {
# ...
GOV=$(LC_ALL=C cpupower frequency-info -p | grep -o '"[a-z]\+"' | tr -d '"') # Essa variável está sendo definida num "shell paralelo", não vai afetar o shell principal
#...
) # em vez de }
Outra opção é usar local variavel
no começo da função, para o shell entender que a variável é específica daquele bloco (alguns shells mais minimalistas não sabem mexer com isso, no entanto):
lsau() {
local hmsg="\n '$@'" #...
#...
}
ou
lsau() {
local hmsg
hmsg="Ajuda:"
#...
}
Nem é necessário o monte de dígitos para não confundir acidentalmente com outra variável que o usuário/outra função talvez já esteja usando.