PowerShell中的全局变量和局部变量
我有全局变量,希望在函数中使用它们 我在函数中不使用同名的局部变量PowerShell中的全局变量和局部变量,powershell,global-variables,Powershell,Global Variables,我有全局变量,希望在函数中使用它们 我在函数中不使用同名的局部变量 #全局变量: $Var1=@{..} $Var2=@(…) 功能测试{ $Var1.keyX=“kjhkjh” $Var2[2]=6.89768 } 我这样做,它的工作,但它是安全的还是我必须使用以下 $Global:Var1.keyX=“kjhkjh” 在您的函数中,您正在修改哈希表的内容,因此无需使用$global,除非您的函数(或函数和全局作用域之间的函数调用方)碰巧有局部变量$Var1和$Var2(顺便说一句,您没有缺
#全局变量:
$Var1=@{..}
$Var2=@(…)
功能测试{
$Var1.keyX=“kjhkjh”
$Var2[2]=6.89768
}
我这样做,它的工作,但它是安全的还是我必须使用以下
$Global:Var1.keyX=“kjhkjh”
在您的函数中,您正在修改哈希表的内容,因此无需使用$global,除非您的函数(或函数和全局作用域之间的函数调用方)碰巧有局部变量$Var1和$Var2(顺便说一句,您没有缺少$
)。如果这都是您自己的代码,那么我会说保持原样。但是,如果您的代码允许其他人的代码调用您的函数,那么我将使用$global:Var1
说明符来确保您正在访问全局变量,而不是无意中访问调用您函数的函数中同名的变量
关于PowerShell中的动态作用域,需要了解的另一件事是,当您为函数中的变量赋值时,该变量恰好是全局变量,例如:
$someGlobal = 7
function foo { $someGlobal = 42; $someGlobal }
foo
$someGlobal
PowerShell将对函数中的变量$someGlobal执行“写入时复制”操作。如果您的目的是真正修改全局变量,那么您将使用$global:
说明符:
$someGlobal = 7
function foo { $global:someGlobal = 42; $someGlobal }
foo
$someGlobal
谢谢你,基思(我改错了)!这正是有点令人困惑的地方:数组和散列(还有什么?)可以在函数中更改,而不使用$global:但普通变量不能。基本上,您可以更改引用对象的内容(对象上的属性、数组中的元素、哈希表中的元素)。不使用
$global:
就无法更改变量引用的实际对象(数组/哈希表)。