$ _是什么意思在PowerShell中?
我已经在PowerShell中看到了很多,但是它究竟做了什么?
$_
这是pipe道中当前值的variables。
1,2,3 | %{ write-host $_ }
例如在上面的代码中,为数组中的每个值调用%{}
块。 $_
variables将包含当前值。
我认为最简单的方法就是在C#中的lambdaexpression式中考虑像input参数这样的variables。 即$_
类似于x
中的x => Console.WriteLine(x)
在C#中的匿名函数。 考虑下面的例子:
电源shell:
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
根据这个网站,这是一个参考,主要是循环。
$ _(美元下划线)“THIS”令牌。 通常指的是在foreach循环中的项目。 任务:打印集合中的所有项目。 解。 … | foreach {Write-Host $ _}
$ _是一个variables,它遍历从前一个|传递的每个对象/元素 (pipe)。
$ _是自动variables$ PSItem的一个别名(在PowerShell V3.0中引入; 使用信息在这里find )代表pipe道中的当前项目。
$_
是系统通常在块expression式中创build的一个variables,这些块expression式由与pipe道一起使用的cmdlet引用,例如Where-Object
和ForEach-Object
。
但也可以用于其他types的expression式,例如Select-Object
与expression式属性结合使用。 Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}
Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}
。 在这种情况下, $_
表示正在pipe理的项目,但可能存在多个expression式。
它也可以通过自定义参数validation来引用,其中脚本块用于validation值。 在这种情况下, $_
表示从调用中收到的参数值。
最接近c#和java的比喻是lamdaexpression式。 如果你打破了PowerShell的基础,那么一切都是一个脚本块,包括脚本文件,函数和cmdlet。 您可以定义自己的参数,但是在某些情况下,由系统为您创build的参数表示要处理/评估的input项目 。 在这些情况下,自动variables是$_
。