我正在通过一些在线教程学习 shell 脚本,我来到了以下声明全局变量和局部变量差异的脚本。
#!/bin/bash
# Experimenting with variable scope
var_change () {
local var1='local 1'
echo Inside function: var1 is $var1 : var2 is $var2
var1='changed again'
var2='changed again'
}
var1='global 1'
var2='global 2'
echo Before function call: var1 is $var1 : var2 is $var2
var_change
echo After function call: var1 is $var1 : var2 is $var2
Run Code Online (Sandbox Code Playgroud)
输出是:
函数调用前:var1 是全局 1:var2 是全局 2
内部函数:var1 是本地 1:var2 是全局 2
函数调用后:var1 是全局的 1:var2再次改变
我的问题...
为什么var1
在函数调用“全局 1”而不是“再次更改”之后?有人可以解释一下吗?
Nic*_*ckD 13
var1
在函数中声明为local。所以在函数的执行过程中有两个变量命名为var1
:全局变量和局部变量;但该函数只能“看到”局部的(局部的“阴影”全局的)。所以在函数内部,你所做的任何事情var1
都是对局部变量完成的;全球var1
根本没有被触及。