尝试使用范围表示法循环索引在脚本文件中循环遍历$ args时出错

gui*_*ooo 4 powershell powershell-2.0

我无法弄清楚为什么以下代码失败:

# test.ps1
"`$args: ($args)"
"`$args count: $($args.length)"

# this fails
0..$($args.length - 1) | %{ $args[$_] = ($args[$_] -replace '`n',"`n") }

# this works
$i = 0
foreach ( $el in $args ) { $args[$i] = $args[$i] -replace '`n',"`n"; $i++ }
"$args"
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

rem from cmd.exe
powershell.exe -noprofile -file test.ps1 "a`nb" "c"
Run Code Online (Sandbox Code Playgroud)

Kei*_*ill 7

范围问题.foreach-object(%)scriptblock中的$ args是该scriptblock的本地.以下作品:

"`$args: $args" 
"`$args count: $($args.length)" 
$a = $args

# this fails 
0..$($args.length - 1) | %{ $a[$_] = ($a[$_] -replace '`n',"`n") } 
$a
Run Code Online (Sandbox Code Playgroud)