Variáveis de escopo no ksh

4

No ksh, eu tenho duas variáveis com o mesmo nome, uma global, 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 referenciar a variável global $ LOG_FILE dentro da função exec_script, como devo qualificá-la para que o local não seja referenciado?

    
por user917279 30.09.2013 / 16:58

1 resposta

1

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

trecho de Escopo das variáveis no KSH

Ksh has dynamic scoping, so the variable is also accessible in functions that are invoked by the function that declares the variable. This is tersely documented in the section on functions in the manual. Note that in AT&T ksh (as opposed to pdksh and derivatives, and the similar features of bash and zsh),

excerto Parâmetros: uma visão geral

When you read or set a variable, zsh looks in the current function to see if that variable exists. If not, it looks in the next outermost function, and so on, until it reaches the global (outermost) scope. Therefore, if you assign a value to a variable that doesn't exist, the variable gets created in the outermost scope. (Exporting a new parameter also has this effect.)

    
por 30.09.2013 / 20:33