我應該在bash腳本的函數末尾取消設置局部變量嗎? 作爲一個例子,下面的函數:在bash中,我應該取消設置函數中的局部變量嗎?
square()
{
local var=$1
((var = var * var))
echo $var
## should I unset $var here??
}
只是好奇最佳做法,謝謝!
我應該在bash腳本的函數末尾取消設置局部變量嗎? 作爲一個例子,下面的函數:在bash中,我應該取消設置函數中的局部變量嗎?
square()
{
local var=$1
((var = var * var))
echo $var
## should I unset $var here??
}
只是好奇最佳做法,謝謝!
如果您沒有使用local
命令,那麼您希望在離開函數之前取消設置變量以避免污染全局名稱空間。
square() {
var=$1 # var is global, and could be used after square returns
((var = var * var))
echo $var
unset var # Remove it from the global namespace
}
這種做法的問題是,square
不知道,如果它實際上首先創建var
。它可能覆蓋並最終取消設置square
之前被使用的全局變量。
使用local
,您保證會創建一個新的變量,該變量僅在函數內部可見。如果有全局var
,則該值在該函數的持續時間內將被忽略。當函數退出時,本地var
將被丟棄,並且可以像以前一樣使用全局var
(如果有的話)。
$ var=3
$ echo $var
3
$ square 9
81
$ echo $var
3
如果該評論## should I unset $var here??
是你的子程序的結束,你不需要取消它,因爲它會在那之後超出範圍。