我在PowerShell中见过很多下面的代码,但是它到底是做什么的呢?

$_

当前回答

$_是自动变量$PSItem的别名(在PowerShell V3.0中引入;在这里找到使用信息),它表示来自管道的当前项。

关于自动变量的PowerShell (v6.0)在线文档在这里。

其他回答

$_是一个迭代前一个|(管道)传递的每个对象/元素的变量。

我认为把这个变量理解为c#中的lambda表达式中的输入参数是最简单的方法。例如,$_类似于c#中x => Console.WriteLine(x)匿名函数中的x。考虑以下例子:

PowerShell:

1,2,3 | ForEach-Object {Write-Host $_}

打印:

1
2
3

or

1,2,3 | Where-Object {$_ -gt 1}

打印:

2
3

并使用LINQ将其与c#语法进行比较:

var list = new List<int> { 1, 2, 3 };
list.ForEach( _ => Console.WriteLine( _ ));

打印:

1
2
3

or

list.Where( _ => _ > 1)
    .ToList()
    .ForEach(s => Console.WriteLine(s));

打印:

2
3

$_是自动变量$PSItem的别名(在PowerShell V3.0中引入;在这里找到使用信息),它表示来自管道的当前项。

关于自动变量的PowerShell (v6.0)在线文档在这里。

这是管道行中当前值的变量,在Powershell 3和更新版本中称为$PSItem。

1,2,3 | %{ write-host $_ } 

or

1,2,3 | %{ write-host $PSItem } 

例如,在上面的代码中,数组中的每个值都会调用%{}块。$_或$PSItem变量将包含当前值。

根据这个网站,这是一个参考,大部分是循环的。

$_(美元下划线) “这”牌。通常是指 项目在foreach循环中。 任务: 打印集合中的所有项目。 解决方案……| foreach{写主机 $ _}