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 會在目前函數中尋找該變數是否存在。如果沒有,它會尋找下一個最外層函數,依此類推,直到到達全域(最外層)作用域。因此,如果將值指派給不存在的變量,則會在最外層作用域中建立該變數。 (匯出新參數也有此效果。)

相關內容