PowerShell中如何通过数组引用修改对应变量值?
问题分析
原代码里,$array = @($a, $b, $c) 是把变量值的副本存入数组,而非变量本身的引用。foreach循环里修改的$var只是数组中的临时元素,和原变量$a、$b、$c完全无关,所以最终输出还是0 : 0 : 0。
解决方案:使用
[ref]传递引用 要直接修改原变量,需要把变量的引用存入数组,通过[ref]类型实现。修改后的代码如下:
$a = 0 $b = 0 $c = 0 # 存入变量的引用,而非值的副本 $array = @([ref]$a, [ref]$b, [ref]$c) foreach ($varRef in $array) { # 通过Value属性修改原变量的值 $varRef.Value = 3 } Write-Host "$a : $b : $c"
这段代码运行后会输出3 : 3 : 3,完全符合需求。
关键说明
[ref]$var会创建一个指向原变量的引用对象,数组里存储的不再是具体数值,而是变量的内存地址引用。- 在循环中,必须通过
$varRef.Value来访问或修改原变量的值,这是[ref]类型对象的专属属性,用来操作背后指向的原变量。
内容的提问来源于stack exchange,提问作者Ricola
相关产品推荐
相关产品推荐

