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

发布于 2024-08-23 17:25:58 字数 412 浏览 6 评论 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"

我这样调用它:

rem from cmd.exe
powershell.exe -noprofile -file test.ps1 "a`nb" "c"

I can't figure out why the following code fails:

# 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"

I'm calling it like so:

rem from cmd.exe
powershell.exe -noprofile -file test.ps1 "a`nb" "c"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

请你别敷衍 2024-08-30 17:25:58

范围界定问题。 foreach-object (%) 脚本块内的 $args 是该脚本块的本地变量。以下作品:

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

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

Scoping issue. The $args inside the foreach-object (%) scriptblock is local to that scriptblock. The following works:

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

# this fails 
0..$($args.length - 1) | %{ $a[$_] = ($a[$_] -replace '`n',"`n") } 
$a
初见终念 2024-08-30 17:25:58

基思回答了这个问题。只是想添加更多信息,因为我发现它很多次很有用。看一下代码:

[21]: function test{
>>     $args -replace '`n',"`n"
>> }
>>
[22]: test 'replace all`nnew' 'lines`nin the `nstring' 'eof`ntest'
replace all
new
lines
in the
string
eof
test

-replace 运算符也适用于数组!

Keith answered this question. Just wanted to add some more info, because I found it useful many times. Look at the code:

[21]: function test{
>>     $args -replace '`n',"`n"
>> }
>>
[22]: test 'replace all`nnew' 'lines`nin the `nstring' 'eof`ntest'
replace all
new
lines
in the
string
eof
test

The -replace operator works with array too!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文