Powershell 范围改变?
Powershell scoping change?
我在更新函数中的全局变量时遇到了问题。我找到了以下看起来很有希望的文章:
Variable scoping in PowerShell
然而,我发现他发布的内容与我看到的输出不符。这是他的代码:
$array=@("g")
function foo()
{
$array += "h"
Write-Host $array
}
& {
$array +="s"
Write-Host $array
}
foo
Write-Host $array
他的结果:
g s
g h
g
但是...我在 PowerShell 5.0 上的结果是:
s
h
g
添加 $global:array += "s"
的建议解决方案得到:
g
h
g
我错过了什么,我该如何纠正?如果 $global: 不起作用,我如何从函数内部更新函数外部的变量?
数组是在 script
范围内声明的,而不是全局的。也可以将数组声明为全局变量:
$global:array=@("g")
或使用脚本范围更新它:
$script:array += "h"
我建议后者,因为将全局变量用于仅脚本需要的东西有点多余。
我在更新函数中的全局变量时遇到了问题。我找到了以下看起来很有希望的文章:
Variable scoping in PowerShell
然而,我发现他发布的内容与我看到的输出不符。这是他的代码:
$array=@("g")
function foo()
{
$array += "h"
Write-Host $array
}
& {
$array +="s"
Write-Host $array
}
foo
Write-Host $array
他的结果:
g s
g h
g
但是...我在 PowerShell 5.0 上的结果是:
s
h
g
添加 $global:array += "s"
的建议解决方案得到:
g
h
g
我错过了什么,我该如何纠正?如果 $global: 不起作用,我如何从函数内部更新函数外部的变量?
数组是在 script
范围内声明的,而不是全局的。也可以将数组声明为全局变量:
$global:array=@("g")
或使用脚本范围更新它:
$script:array += "h"
我建议后者,因为将全局变量用于仅脚本需要的东西有点多余。