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」と指定するのは悪い考えだからです。