linux – 在bash中,我应该在函数中取消设置局部变量吗?

我应该在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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...