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



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

我没有在函数中使用相同名称的局部变量!

# Global variables:
$Var1 = @{ .. }
$Var2 = @( .. )
function testing{
    $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执行"copy-on-write"操作。如果你真的想修改全局变量,那么你可以使用$global:说明符:

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

相关内容

  • 没有找到相关文章

最新更新