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

标签 linux bash unix

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

关于linux - 在 bash 中,我应该取消设置函数内的局部变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35217413/

相关文章:

linux - 在 Bash 中,为什么 `cd//` 起作用(并且等于 `cd/` )?

linux - 当我以标准用户身份运行它时,我可以将 lshw 警告通过管道传输到/dev/null 吗?

python - 从非常大的文件中删除稀有词

linux - 如何在unix中显示文件第n行的所有行

c - 在 C 中对结构进行排序

linux - 在 VMware vcenter 设备上禁用密码过期?

python - 如何将图像显示为使用 wxPython 管理的颜色?

c - 强制动态链接库

bash - Shell脚本-打开ssh连接并在需要时发送命令

自定义 bash 函数的 Git 自动完成