我应该在bash脚本的函数末尾取消设置局部variables吗? 作为一个例子,下面的函数:
square() { local var=$1 (( var = var * var )) echo $var ## should I unset $var here?? }
只是好奇最好的做法,谢谢!
Bash虽然循环不结束
在Bash脚本中的正则expression式
设置内核的构build选项
如果不使用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=3 $ echo $var 3 $ square 9 81 $ echo $var 3
如果该评论## should I unset $var here?? 是你的子程序的结束,你不需要取消它的设置,因为无论如何它会超出范围。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。