PowerShell循环中$i的值为何被意外输出?
PowerShell循环中$i值意外输出到控制台的解决方法
执行这段PowerShell代码时,循环里的$i值会意外连续输出0、1、2、3...到控制台,尝试用Out-Null或者改成$i = $i + 1的写法都没解决问题。涉及的代码如下:
$i = 0 foreach ($key in $variationjson.PSObject.Properties.Name) { $value = $variationjson.$key * 100 $series.Points.AddXY("", $value) $series.Points[$i].Label = $key if ($value -lt 0) { $series.Points[$i].Color = [System.Drawing.Color]::Red } else { $series.Points[$i].Color = [System.Drawing.Color]::Green } $i++ # 递增索引 }
注:$series来自Windows.Forms.DataVisualization.Charting.Series,$variationjson是类似{title_name:value...}结构的JSON对象。
问题原因
PowerShell默认会输出所有表达式的返回值,$i++属于后置递增操作,它会返回递增前的$i值,每次执行这个语句,返回值就会被输出到控制台。
解决办法
有两种简单有效的方式可以压制这个输出:
- 用
[void]前缀丢弃返回值
把$i++改成[void]$i++,直接强制丢弃递增操作的返回值,不会产生控制台输出:
[void]$i++ # 递增索引,压制输出
- 通过管道输出到
Out-Null
确保正确使用管道语法,把递增操作的结果导向空:
$i++ | Out-Null # 递增索引,丢弃输出
如果要改用$i = $i + 1的写法,同样需要压制返回值,比如:
[void]($i = $i + 1)
内容的提问来源于stack exchange,提问作者LegsNotHand
相关产品推荐
相关产品推荐

