Powershell 请解释一下是什么原因?{${}在管道之后在这里做什么
下面是一些PowerShell输出。有人能给我解释一下包括|的区别吗?{${}并且除了明显的视觉输出差异之外不包括它?这不是一个更大的脚本或任何东西的一部分,我从PowerShell开始,并试图理解一些基本的复杂性。我理解使用regex部分进行拆分Powershell 请解释一下是什么原因?{${}在管道之后在这里做什么,powershell,Powershell,下面是一些PowerShell输出。有人能给我解释一下包括|的区别吗?{${}并且除了明显的视觉输出差异之外不包括它?这不是一个更大的脚本或任何东西的一部分,我从PowerShell开始,并试图理解一些基本的复杂性。我理解使用regex部分进行拆分 PS C:\Users\oucs0058> $pc = "123456789ABCDE" PS C:\Users\oucs0058> $pc -split '(..)' 12 34 56 78 9A BC DE PS C:
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
你什么时候用手机?简而言之,您实际上使用的是Where-Object cmdlet。此cmdlet计算参数脚本块,该脚本块应返回布尔值。如果计算返回$true,则输入对象沿管道传递;如果计算返回$false,则忽略输入对象。例如,其中Object$true将传递所有输入对象,而Object$false将不传递任何输入对象
脚本块可以是任何内容,但其结果将强制转换为布尔值。因此,在写入{$\时,将输入字符串对象强制转换为布尔值。PowerShell将空字符串强制转换为$false,将非空字符串强制转换为$true
$pc-split'..命令返回字符串对象列表,每秒钟返回一个空字符串对象。因此,{$}对于空字符串将返回$false,对于非空字符串将返回$true,如果非常简单,则返回其余的:{$}对象将传递非空字符串并忽略空字符串。嗯。?{$}将其理解为:如果实际值管道不是null,那么肯定没有任何null?或者更确切地说,第一次输出肯定会有。为什么会有空字符串?实际上,不是空字符串,而是空字符串。但是,$null在强制转换为布尔值时是$false,所以这没有任何区别。请参阅我关于强制转换的答案。谢谢您提供的信息。那么,为什么在进行拆分时,每秒钟的字符串都是空的呢?好问题,我认为这与.NET string.split行为有关,即如果多个匹配项彼此相邻,则会将空字符串插入数组中。从…起输入+正则表达式即可满足此条件。很棒的信息和msdn链接的+1!