我应该在bash脚本中的函数末尾取消设置我的局部变量吗? 例如,以下功能:
square()
{
local var=$1
(( var = var * var ))
echo $var
## should I unset $var here??
}
对最佳做法感到好奇,谢谢!
答案 0 :(得分:4)
如果您没有使用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
,您可以保证创建一个仅在函数内可见的 new 变量。如果存在全局var
,则在函数持续时间内忽略它的值。当函数退出时,将丢弃本地var
,并且可以像以前一样使用全局var
(如果有)。
$ var=3
$ echo $var
3
$ square 9
81
$ echo $var
3
答案 1 :(得分:2)
如果该注释## should I unset $var here??
是你的子程序的结束,你就不需要取消它,因为它会在那之后就超出范围。