在 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 在查找变量的作用域时询问环境的方式的限制。
克什有动态范围界定,因此该变量也可以在声明该变量的函数调用的函数中访问。这在手册中有关功能的部分。请注意,在 AT&T ksh 中(与 pdksh 及其衍生物相对,以及 bash 和 zsh 的类似功能),
摘抄参数:概述
当您读取或设置变量时,zsh 会在当前函数中查找该变量是否存在。如果没有,它会查找下一个最外层函数,依此类推,直到到达全局(最外层)作用域。因此,如果将值分配给不存在的变量,则会在最外层作用域中创建该变量。 (导出新参数也有此效果。)