powersell变量范围包括:global,script,private,local。
我在循环中测试一个变量,为什么它在循环外有值?
$a=$false
for ($i = 0; $i -lt 10; $i++) {
$private:recObj=@{}
$private:recObj.id=$i
if ($i -lt 6) {
$a=$true
}else {
$a=$false
}
$private:recObj.a=$a
$private:recObj.b="2323"
}
$private:recObj #recObj is private, why here have output? I want it is null
结果:
Name Value
---- -----
b 2323
id 9
a False
答案 0 :(得分:4)
PowerShell中的循环体不是范围。在这种情况下,私有是整个脚本。
答案 1 :(得分:0)
我不是这方面的专家,但我想强调一些事情。
范围就像我们的Dot Net Scopes:
全球是公开的,
脚本是内部的,
私人是私有的,
本地是当前的堆栈级别
下一个是 Visiblity
默认情况下,powershell visiblity为Public。
如果您使用
(Get-Variable -Name recObj).Visibility
您应该看到该变量的可见性。 如果您将for循环视为一个单独的范围,那么它在PS中是错误的。
第三,你不需要在任何地方声明私人;有一次会这样做:
$a=$false
for ($i = 0; $i -lt 10; $i++) {
$private:recObj=@{}
$recObj.id=$i
if ($i -lt 6) {
$a=$true
}else {
$a=$false
}
$recObj.a=$a
$recObj.b="2323"
}
$recObj
但是你想限制它,然后你明确地将可见性设为私有。
Set-Variable recObj -Visibility Private
希望它能帮助你更好地理解。