2016-02-05 32 views

回答

2

如果您沒有使用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 
2

如果該評論## should I unset $var here??是你的子程序的結束,你不需要取消它,因爲它會在那之後超出範圍。

相關問題