PowerShell中的$ _是什么意思?

时间:2010-08-16 14:33:34

标签: powershell

我在PowerShell中看到过以下内容,但它究竟做了什么?

$_

6 个答案:

答案 0 :(得分:156)

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

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

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

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

答案 1 :(得分:34)

我认为考虑这个变量的最简单方法就像在C#中的lambda表达式中的输入参数一样。即$_类似于C#中x匿名函数中的x => Console.WriteLine(x)。请考虑以下示例:

的PowerShell:

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

打印:

1
2
3

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

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

打印:

2
3

答案 2 :(得分:27)

根据this网站,它是对this的引用,主要是在循环中。

  

$ _(美元下划线)   '这个'令牌。通常是指   foreach循环中的项目。   任务:   打印集合中的所有项目。   解。 ...... | foreach {写主持人   $ _}

答案 3 :(得分:4)

$ _是自动变量$ PSItem(在PowerShell V3.0中引入; Usage information found here)的别名,它代表管道中的当前项目。

PowerShell(v6.0)自动变量的在线文档是here

答案 4 :(得分:1)

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

答案 5 :(得分:0)

$_是由系统创建的变量,通常在块表达式中,由与Where-ObjectForEach-Object等管道一起使用的cmdlet引用。

但它也可以用在其他类型的表达式中,例如将Select-Object与表达式属性结合使用。 Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}。在这种情况下,$_表示正在管道的项目,但可以存在多个表达式。

它也可以通过自定义参数验证引用,其中脚本块用于验证值。在这种情况下,$_表示从调用接收的参数值。

与c#和java最接近的类比是lamda表达式。如果你将powershell分解为基础知识,那么一切都是脚本块,包括脚本文件a,函数和cmdlet。您可以定义自己的参数,但在某些情况下,系统会为您创建一个,表示要处理/评估的输入项。在这些情况下,自动变量为$_