加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 理解词汇范围 – 维基百科是否正确?

发布时间:2020-12-15 17:00:16 所属栏目:安全 来源:网络整理
导读:我一直在努力克服词汇范围(我不太相信使用lexical这个词,但这是另一个讨论)我已经看了 Wikipedia’s entry. 根据相当简单的Bash脚本示例 $x=1 $function g () { echo $x ; x=2 ; }$function f () { local x=3 ; g ; }$f # does this print 1,or 3?3$echo $x
我一直在努力克服词汇范围(我不太相信使用lexical这个词,但这是另一个讨论)我已经看了 Wikipedia’s entry.

根据相当简单的Bash脚本示例

$x=1 
$function g () { echo $x ; x=2 ; }
$function f () { local x=3 ; g ; }
$f # does this print 1,or 3?
3
$echo $x # does this print 1,or 2?
1

Bash脚本的输出是3,1.然而,在我看来它应该是3,因为函数g打印x的(动态)值然后设置x = 2的值.

我是否需要更正维基百科条目,或调整我的理解?

从bash手册页描述本地内置(强调我的)

When local is used within a function,it causes the
variable name to have a visible scope restricted to that function and its children.

调用g时,将从最近的封闭运行时上下文中使用x的值(未标记为local).当从f调用g时,这意味着由f定义的局部变量x,而不是全局变量x.这适用于x的查找和赋值.当从全局范围调用g时,x指的是全局变量x.

这与词法范围形成对比,其中函数g中的x将始终引用全局x,因为g在全局范围中定义.调用函数的地方不相关.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读