kshには同じ名前の2つの変数があります。 1 つはグローバル変数、もう 1 つは関数ローカル変数です。
#!/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 は現在の関数に変数が存在するかどうかをチェックします。それ以外の場合は、次に最も外側の関数を見つけることで、グローバル(最も外側の)範囲に達するまで続きます。したがって、存在しない変数に値を割り当てると、その変数は最も外側の範囲に作成されます。 (新しいパラメータをエクスポートしてもこの効果があります。)