美元在PowerShell中是什么意思?

美元在PowerShell中是什么意思?,powershell,Powershell,我在PowerShell中看到了很多下面的内容,但它到底做了什么 $_ 据该网站称,这是一个参考,主要是在循环中 美元下划线 “这个”标记。通常指 foreach循环中的项。 任务: 打印集合中的所有项目。 解决办法foreach{写主机 $\} 这是管线中当前值的变量,在Powershell 3及更新版本中称为$PSItem 1,2,3 | %{ write-host $_ } 或 例如,在上面的代码中,%{}块是为数组中的每个值调用的。$或$PSItem变量将包含当前值>P>我认为在C

我在PowerShell中看到了很多下面的内容,但它到底做了什么

$_
据该网站称,这是一个参考,主要是在循环中

美元下划线 “这个”标记。通常指 foreach循环中的项。 任务: 打印集合中的所有项目。 解决办法foreach{写主机 $\}


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

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


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

>P>我认为在C中λ表达式中输入变量的最简单的方法是类似于输入参数,即$x类似于x=>控制台中的x。CuleLeNeX匿名函数在C中考虑以下例子:

PowerShell:

1,2,3 | ForEach-Object {Write-Host $_}
印刷品:

1
2
3
2
3
1
2
3
2
3

印刷品:

1
2
3
2
3
1
2
3
2
3
并将其与使用LINQ的C语法进行比较:

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

印刷品:

1
2
3
2
3
1
2
3
2
3

$是一个变量,它迭代从上一个|管道传递的每个对象/元素。

$是PowerShell V3.0中引入的自动变量$PSItem的别名;表示管道中的当前项

PowerShell v6.0自动变量的联机文档是。

$\是由系统创建的变量,通常位于块表达式中,这些块表达式由与管道(如Where对象和ForEach对象)一起使用的cmdlet引用

但它也可以用于其他类型的表达式,例如与表达式属性组合使用的“选择对象”。获取子项|选择对象@{Name=Name;表达式={$\ Name}。在这种情况下,$\表示正在管道中的项,但可以存在多个表达式

自定义参数验证也可以引用它,其中使用脚本块验证值。在本例中,$\表示从调用接收到的参数值


与c和java最相似的是lamda表达式。如果将powershell分解为基本功能,则所有内容都是一个脚本块,包括脚本文件、函数和cmdlet。您可以定义自己的参数,但在某些情况下,系统会为您创建一个参数,表示要处理/评估的输入项。在这些情况下,自动变量是$。

它不一定与管道相关。它更像是当前正在执行的脚本块的当前参数。例如,虽然您可以在ForEach对象中很好地使用它,但在诸如Get Foo | Add Member NoteProperty Bar$\ SomeProperty之类的对象中不能使用它,因为其中涉及到一个管道,但没有脚本块,因此没有$。也就是说,PowerShell帮助还引用了$的管道。令人困惑。@Joey您完全可以在示例中使用$。Get Foo | Add Member-Type NoteProperty-Name Bar-Value$|SomeProperty@Xalorous:仅仅因为它不产生错误并不意味着它可以工作:Get ChildItem | Add Member-Type NoteProperty-Name Bar-Value$|Name-PassThru | Select Bar。。。如果在执行管道的作用域中有一个$u,它就可以工作。但这与你通常试图写这样的东西时的意思大不相同。@Joey$u在你写的东西中,出于某种原因,没有循环遍历所有对象。试试这个。gci |%{$|添加成员-类型NoteProperty-名称栏-值$|.Name-PassThru}|选择栏。我怀疑使用没有显式foreach的gci | cmdlet会收集gci结果并将数组传递给cmdlet。但是,数组是一个对象,因此它向数组对象添加了一个属性。该数组没有“name”属性,因此分配给$\ux.Bar的值为$null。底线是$u广泛用于流水线。不需要%{}循环是新的。删除了额外管道的工作版本。gci |%{add member-InputObject$|-Type NoteProperty-Name Bar-Value$|.Name-PassThru}|选择BarIn C不要将|用作lambda中的输入参数。|有时在忽略参数时使用,请改用x。对于$变量来说,这是一个相当混乱的术语。在OOP中,它通常指的是类,而不是变量。@remco特别是当PS v5添加$this变量用于类时。当然,对于给定的单个特殊标记,这个问题已经得到了回答,但是对于说明PowerShell所有特殊标记的挂图,请看