我是PowerShell的新手,我只是没有得到如何修改父作用域中的变量:
$val = 0
function foo()
{
$val = 10
}
foo
write "The number is: $val"
当我跑步时,我得到:
The number is: 0
我希望它是10.但是PowerShell正在创建一个隐藏父范围内的变量的新变量。
我尝试过这些,没有成功(根据文档):
$script:$val = 10
$global:$val = 10
$script:$val = 10
但是这些甚至都没有“编译”。 我错过了什么?
答案 0 :(得分:24)
您不需要使用全局范围。 shell控制台中可能已存在具有相同名称的变量,您可以更改它。使用脚本范围修饰符。使用范围修饰符时,不要在变量名中包含$符号。
$ script:val = 10
答案 1 :(得分:14)
我知道这很疯狂,但我有一个类似的问题,在我的搜索中找到了这个帖子,想分享我找到的答案:
$val = 0
function foo {
Set-Variable -scope 1 -Name "Val" -Value "10"
}
foo
write "The number is: $val"
可以在Microsoft文档文章About Scopes中找到更多信息。
答案 2 :(得分:6)
让我指出第三种选择,即使答案已经完成。如果你想改变一个变量,不要害怕通过引用传递它并以这种方式使用它。
$val=1
function bar ($lcl)
{
write "In bar(), `$lcl.Value starts as $($lcl.Value)"
$lcl.Value += 9
write "In bar(), `$lcl.Value ends as $($lcl.Value)"
}
$val
bar([REF]$val)
$val
返回:
1
In bar(), $lcl.Value starts as 1
In bar(), $lcl.Value ends as 10
10
答案 3 :(得分:5)
如果你想使用它,你可以这样做:
$global:val=0
function foo()
{
$global:val=10
}
foo
write "The number is: $val"