这是代码。
#!/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'
函数应该改变这一点。