zshの関数定義における変数の拡張

zshの関数定義における変数の拡張

zshで関数を定義すると、変数の評価/拡張に問題があります。これは可能ですか?例:

variable=foo
mytest(){
  echo ${variable}  
}
mytest           //outputs foo
variable=bar
test           //outputs bar

test() の変数が foo のままで、もはや $variable の影響を受けないことを願っています。ドキュメントを読んで評価やさまざまな参照を試しましたが、何も機能しないようです。

ベストアンサー1

一度設定された値を保持する変数は関数の内部になければなりません。これはグローバル変数でのみ実行できるため、次のように別の名前を指定する必要があります。

xtest(){
  typeset -g test_variable
  : ${test_variable:=$variable}
  echo $test_variable
}

これはtest_variable関数が最初に呼び出されたときに設定されますが、それ以降は上書きされません。

更新:Stéphane Chazelasによって提供された説明に基づいて関数定義の構文を変更し、関数名をtestからxtestに変更しました。とにかく関数名を「test」と指定するのは悪い考えだからです。

おすすめ記事