ksh での変数のスコープ設定

ksh での変数のスコープ設定

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 における変数のスコープ

Kshは動的スコープなので、変数は、その変数を宣言した関数によって呼び出される関数からもアクセス可能になります。これは、マニュアルの機能に関するセクションAT&T ksh(pdkshとその派生版、およびbashとzshの同様の機能とは対照的)では、

抜粋パラメータ: 概要

変数を読み取ったり設定したりすると、zsh は現在の関数を調べて、その変数が存在するかどうかを確認します。存在しない場合は、次の最も外側の関数を調べ、グローバル (最も外側の) スコープに到達するまでこれを繰り返します。したがって、存在しない変数に値を割り当てると、最も外側のスコープに変数が作成されます (新しいパラメーターをエクスポートする場合も、この効果があります)。

関連情報