PowerShell全局变量局部变量

goo*_*oly 9 powershell global-variables

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

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

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

我这样做并且它有效,但是它是安全的还是我必须使用:

$Global:Var1.keyX = "kjhkjh"
Run Code Online (Sandbox Code Playgroud)

谢谢,Gooly

Kei*_*ill 21

在您的函数中,您正在修改哈希表的内容,因此除非您的函数(或函数和全局范围之间的函数调用者)恰好具有局部变量$ Var1和$ Var2(BTW aren'),否则不需要使用$ global.你错过了$).如果这是你自己的代码,那么我会说保持原样.但是,如果您的代码允许其他人的代码调用您的函数,那么我将使用说明$global:Var1符来确保您正在访问全局变量,而不是无意中访问调用您的函数的函数中的同名变量.

关于PowerShell中动态范围的另一件事是,当你为一个函数中的变量赋值并且该变量碰巧是全局的时,例如:

$someGlobal = 7
function foo { $someGlobal = 42; $someGlobal }
foo
$someGlobal
Run Code Online (Sandbox Code Playgroud)

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

$someGlobal = 7
function foo { $global:someGlobal = 42; $someGlobal }
foo
$someGlobal
Run Code Online (Sandbox Code Playgroud)