我在PowerShell中见过很多下面的代码,但是它到底是做什么的呢?
$_
我在PowerShell中见过很多下面的代码,但是它到底是做什么的呢?
$_
当前回答
我认为把这个变量理解为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
其他回答
$_是一个迭代前一个|(管道)传递的每个对象/元素的变量。
我认为把这个变量理解为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
根据这个网站,这是一个参考,大部分是循环的。
$_(美元下划线) “这”牌。通常是指 项目在foreach循环中。 任务: 打印集合中的所有项目。 解决方案……| foreach{写主机 $ _}
这是管道行中当前值的变量,在Powershell 3和更新版本中称为$PSItem。
1,2,3 | %{ write-host $_ }
or
1,2,3 | %{ write-host $PSItem }
例如,在上面的代码中,数组中的每个值都会调用%{}块。$_或$PSItem变量将包含当前值。
$_是一个由系统创建的变量,通常在块表达式中被cmdlet引用,这些cmdlet与Where-Object和ForEach-Object等管道一起使用。
但它也可以用于其他类型的表达式,例如与表达式属性相结合的选择对象。Get-ChildItem |选择对象@{Name="Name";表达式={$ _name .Name}}。在这种情况下,$_表示正在传输的项目,但可以存在多个表达式。
还可以通过自定义参数验证引用它,其中使用脚本块验证值。在这种情况下,$_表示从调用接收到的参数值。
与c#和java最接近的类比是lambda表达式。如果你把powershell分解为基础,那么所有东西都是一个脚本块,包括脚本文件a、函数和cmdlet。您可以定义自己的参数,但在某些情况下,系统会为您创建一个参数,表示要处理/计算的输入项。在这些情况下,自动变量是$_。