我只是在用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解決方案。 –
@SergioGarcíaGalán很好,那麼你可以使用它。 – sorontar
最後,我必須重構整個腳本,以便現在不需要這種功能。很高興它處於早期階段:-D謝謝大家! –