En ksh, tengo dos variables con el mismo nombre, una global y otra local para una función.
#!/bin/ksh
LOG_FILE=lf
function exec_script
{
local LOG_FILE=f
print $LOG_FILE
}
exec_script
print $LOG_FILE
Si quiero hacer referencia a la variable global $LOG_FILE dentro de la función exec_script, ¿cómo debo calificarla para que no se haga referencia a la local?
Respuesta1
No creo que puedas. Creo que es una limitación de cómo Ksh interroga al entorno cuando busca el alcance de una variable.
extracto deAlcance de las variables en KSH
ksh tienealcance dinámico, por lo que la variable también es accesible en funciones que son invocadas por la función que declara la variable. Esto está brevemente documentado en elsección sobre funciones en el manual. Tenga en cuenta que en AT&T ksh (a diferencia de pdksh y derivados, y las características similares de bash y zsh),
extractoParámetros: descripción general
Cuando lees o configuras una variable, zsh busca en la función actual para ver si esa variable existe. De lo contrario, busca en la siguiente función más externa, y así sucesivamente, hasta que alcanza el alcance global (más externo). Por lo tanto, si asigna un valor a una variable que no existe, la variable se crea en el ámbito más externo. (Exportar un nuevo parámetro también tiene este efecto).