Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell中的全局变量和局部变量_Powershell_Global Variables - Fatal编程技术网

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:
就无法更改变量引用的实际对象(数组/哈希表)。