私はちょうどbash関数で苦労しています。は文字列値を返しますが、一部のグローバル変数は関数で修正されています。例:グローバル変数が影響を受けることはありませんので、$(...)(とも `...`が代わりに使用されている場合)、独自の環境を持っている機能を引き起こすためBash関数は値を返す一方で、グローバル変数を変更します
MyGlobal="some value"
function ReturnAndAlter() {
MyGlobal="changed global value"
echo "Returned string"
}
str=$(ReturnAndAlter)
echo $str # prints out 'Returned value' as expected
echo $MyGlobal # prints out the initial value, not changed
これがあります。
値を別のグローバル変数に戻し、その名前だけを使って関数を呼び出すことで、非常に厄介な回避策が見つかりましたが、よりクリーンな方法があるはずです。
私の汚れたソリューション:
MyGlobal="some value"
ret_val=""
function ReturnAndAlter() {
ret_val="Returned string"
MyGlobal="changed value"
}
ReturnAndAlter # call the bare function
str=$ret_val # and assign using the auxiliary global ret_val
echo $str
echo $MyGlobal # Here both global variables are updated.
任意の新しいアイデア?私が行方不明の関数を呼び出すいくつかの方法?
はい。それは私が正しいと読んでいるなら、私の_dirty solution_です。 –
@SergioGarcíaGalánFine、あなたはそれを使うことができます。 – sorontar
最後に私はこの種の機能が今では必要ないようにスクリプト全体を再構成しなければなりません。それは初期段階にあったことをうれしく思います:-Dありがとう皆さん! –