PowerShell中的全局变量和局部变量

时间:2014-06-26 16:29:42

标签: powershell global-variables

我有全局变量,并希望在函数中使用它们。

我不会在函数中使用同名的局部变量!

# Global variables:
$Var1 = @{ .. }
$Var2 = @( .. )
function testing{
    $Var1.keyX = "kjhkjh"
    $Var2[2]   = 6.89768
}

我这样做并且有效,但它是安全还是我必须使用以下内容?

$Global:Var1.keyX = "kjhkjh"

1 个答案:

答案 0 :(得分:21)

在你的函数中,你正在修改哈希表的内容,所以不需要使用$ global,除非你的函数(或函数和全局范围之间的函数调用者)碰巧有局部变量$ Var1和$ Var2( BTW你不能错过$)。如果这是你自己的代码,那么我就说保持原样。但是,如果您的代码允许其他人#39;调用你的函数的代码,然后我会使用$global:Var1说明符来确保你访问全局变量,而不是无意中访问调用你的函数的函数中的同名变量。

在PowerShell中了解动态范围的另一个方面是,当您为函数中的变量赋值并且该变量恰好是全局变量时,例如:

$someGlobal = 7
function foo { $someGlobal = 42; $someGlobal }
foo
$someGlobal

PowerShell将执行" copy-on-write"对函数内的变量$ someGlobal进行操作。如果您的意图是真正修改全局,那么您将使用$global:说明符:

$someGlobal = 7
function foo { $global:someGlobal = 42; $someGlobal }
foo
$someGlobal