Variáveis ​​de escopo em ksh

Variáveis ​​de escopo em ksh

No ksh, tenho duas variáveis ​​com o mesmo nome, uma global e outra local para uma função

#!/bin/ksh

LOG_FILE=lf

function exec_script
{
   local LOG_FILE=f
   print $LOG_FILE
}
exec_script
print $LOG_FILE

Se eu quiser referir a variável global $LOG_FILE dentro da função exec_script, como devo qualificá-la para que o local não seja referenciado?

Responder1

Eu não acho que você possa. Acho que é uma limitação de como o Ksh interroga o ambiente ao procurar o escopo de uma variável.

trecho deEscopo das variáveis ​​no KSH

Ksh temescopo dinâmico, portanto a variável também pode ser acessada em funções invocadas pela função que declara a variável. Isto está documentado sucintamente noseção sobre funções no manual. Observe que no AT&T ksh (em oposição ao pdksh e derivados, e aos recursos semelhantes do bash e zsh),

excertoParâmetros: uma visão geral

Quando você lê ou define uma variável, zsh procura na função atual para ver se essa variável existe. Caso contrário, ele procura na próxima função mais externa e assim por diante, até atingir o escopo global (mais externo). Portanto, se você atribuir um valor a uma variável que não existe, a variável será criada no escopo mais externo. (Exportar um novo parâmetro também tem esse efeito.)

informação relacionada