我应该在bash脚本中的函数末尾取消设置我的局部变量吗?
例如,以下功能:
square()
{
local var=$1
(( var = var * var ))
echo $var
## should I unset $var here??
}
只是对最佳实践感到好奇,谢谢!
解决方法:
如果您没有使用本地命令,那么您可能希望在离开函数之前取消设置变量以避免污染全局命名空间.
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=3
$echo $var
3
$square 9
81
$echo $var
3
标签:bash,unix,linux
来源: https://codeday.me/bug/20190608/1201513.html