有人可以帮我解释一下这个 shell 脚本中的全局变量吗?

有人可以帮我解释一下这个 shell 脚本中的全局变量吗?

这是代码。

#!/bin/bash
var_change() {
 local var1='local 1'
 echo Inside function: var1 is $var1 : var2 is $var2
 var1='changed again'
 var2='2 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

这是执行上述脚本时的输出。

Before function call: var1 is global 1 : var2 is global 2
Inside function: var1 is local 1 : var2 is global 2
After function call: var1 is global 1 : var2 is 2 changed again

只需看一下最后一行,即 After function call。我不明白为什么这里的var2是“2又变了”。我只是认为在函数var_change之外,var2变量必须是global2。

答案1

在函数中,var2没有声明local,因此它是“全局”的,这意味着它在函数末尾的值将是它在函数调用后的值。

换句话说,var1函数内的变量是“本地”的,因此它是不是同一个变量作为同名的全局之一,而var2.

答案2

添加

local var2='local 2'

函数应该改变这一点。

相关内容