Powershell:相当于 Perl 的 'for' 命令?

标签 powershell for-loop replace

我在 Perl 中无数次使用过这种东西:

for ( $someVariable ) {
    s/findthis/replaceitwiththis/g;
    s/findthat/replaceitwithsomethingelse/g;
}

$someVariable 的值暂时在$_ 中,变量“就地”更新;每个新的替换命令都会继续更新/覆盖变量的内容。这是在一个简单的循环中完成大量更改的方便而紧凑的方法。

Powershell 是否具有“for”的等效用法?

在 @neolisk 的回复后添加评论,以便我可以使用格式。

$s = 'abcde'
$s | foreach {
    $_ -replace 'a','x'
    $_ -replace 'e','z'
}
write-host "And: $s"

屏幕上显示的结果:

xbcde
abcdz
And: abcde

还尝试了 $_ = $_ -replace 'a','x' 等等。这里必须有一些额外的语法才能获得“就地”替换......

根据@Nacht 的回复进一步编辑。这行得通,尽管我对反引号并不着迷:

$s = 'now is the time for all good individuals blah blah'
Write-Host $s
$s = $s `
  -replace "now", 'NEVER' `
  -replace 'time', 'moment' `
  -replace "blah\s+blah", '-- oh, WHATEVER'
Write-Host $s

输出:

now is the time for all good individuals blah blah
NEVER is the moment for all good individuals -- oh, WHATEVER

最佳答案

在Powershell中就是这样,只是语法略有不同:

$someVariable | foreach {
    Write-Host $_;
}

如果您想就地替换,请记住 $_ 是不可变的,即只读的。正确的方法是在管道上输出新字符串并收集到另一个变量中,因此对于您的示例,它可能如下所示:

$s = 'abcde' 
$newS = $s | foreach {
    $_ -replace 'a','x' -replace 'e','z'    
}
write-host "And: $newS";

关于Powershell:相当于 Perl 的 'for' 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354825/

相关文章:

powershell - 通过 PowerShell 自动进行 SSL FTP 上传

mysql - Debian 8 上的 PowerShell - 从 mysqldump 到 gzip 的管道

variables - 第一天 lua - 被 for 循环弄糊涂了

c - 字符串打印问题

Javascript 替换标签内的字符串

performance - PowerShell 服务器在修改大 .xml 文件时崩溃

powershell - 脚本结束后删除读取主机历史记录

java - 第 (N-2) 和 (N-1) 的第 N 个输出和

php - 如何使用 PHP 替换阿拉伯字母的初始形式?

php - 在 PHP 代码中,如何删除换行符