下面是一些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
答案 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。