请解释一下是什么?管道之后{$ _}正在这里做

时间:2014-09-10 10:17:24

标签: powershell

下面是一些PowerShell输出。有人可以向我解释包括|之间的区别? {$ _}并不包括它(除了明显的视觉输出差异)?这不是更大的脚本或任何东西的一部分,我开始在PowerShell中,并试图了解一些基本的复杂性。我理解使用正则表达式部分进行拆分。

PS C:\Users\oucs0058> $pc = "123456789ABCDE"
PS C:\Users\oucs0058> $pc -split '(..)'

12

34

56

78

9A

BC

DE

PS C:\Users\oucs0058> $pc -split '(..)' | ? {$_}
12
34
56
78
9A
BC
DE

1 个答案:

答案 0 :(得分:3)

当您使用?简写时,您实际上正在使用Where-Object cmdlet。此cmdlet计算参数脚本块,该块应返回布尔值。如果评估返回$true,则输入对象将传递给管道,如果评估返回$false,则忽略输入对象。例如,Where-Object $true将传递所有输入对象,Where-Object $false将不传递任何输入对象。

脚本块可以是任何内容,但其结果将转换为布尔值。因此,当您编写{$_}时,您将输入字符串对象转换为布尔值。 PowerShell将空字符串转换为$false,将非空字符串转换为$true

您的$pc -split '(..)'命令返回一个字符串对象列表,每秒都为空。因此,对于空字符串,{$_}将返回$false,对于非空字符串,$true将返回Where-Object,其余如果非常简单:{{1}}将传递非空字符串并忽略空的。 HTH。

相关问题