ksh 中的变量范围

ksh 中的变量范围

在 ksh 中,我有两个同名变量,一个是全局变量,另一个是函数本地变量

#!/bin/ksh

LOG_FILE=lf

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

如果我想在 exec_script 函数中引用全局变量 $LOG_FILE,我应该如何限定它以便本地不会被引用?

答案1

我不认为你可以。我认为这是 Ksh 在查找变量的作用域时询问环境的方式的限制。

摘自KSH 中变量的范围

克什有动态范围界定,因此该变量也可以在声明该变量的函数调用的函数中访问。这在手册中有关功能的部分。请注意,在 AT&T ksh 中(与 pdksh 及其衍生物相对,以及 bash 和 zsh 的类似功能),

摘抄参数:概述

当您读取或设置变量时,zsh 会在当前函数中查找该变量是否存在。如果没有,它会查找下一个最外层函数,依此类推,直到到达全局(最外层)作用域。因此,如果将值分配给不存在的变量,则会在最外层作用域中创建该变量。 (导出新参数也有此效果。)

相关内容