PowerShell - foreach() 不会更改元素值

Kol*_*yon 0 powershell foreach scope reference

假设你有数组:

$arr = @(1,2,3,4,5,6,7,8,9)
foreach($number in $arr) { $number ++ }
Run Code Online (Sandbox Code Playgroud)

我希望输出是:

$arr = @(2,3,4,5,6,7,8,9,10)

为什么这不是真的?

Bac*_*its 5

你认为你正在做的事情相当于:

for ($i = 0; $i -lt $arr.Count; $i++) {
    $arr[$i]++;
}
Run Code Online (Sandbox Code Playgroud)

你实际上在做的事情相当于:

for ($i = 0; $i -lt $arr.Count; $i++) {
    $number = $arr[$i];
    $number++;
}
Run Code Online (Sandbox Code Playgroud)

你真正想做的是:

$arr = $arr | ForEach-Object { $_ + 1; }
Run Code Online (Sandbox Code Playgroud)