簡體   English   中英

在bash中,我應該在函數內部取消設置局部變量嗎?

[英]In bash, should I unset a local variable inside a function?

我應該在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?? 是你的子程序的結束,你不需要取消它,因為它無論如何都會在那之后超出范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM