Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 请解释一下是什么原因?{${}在管道之后在这里做什么_Powershell - Fatal编程技术网

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

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:

下面是一些PowerShell输出。有人能给我解释一下包括|的区别吗?{${}并且除了明显的视觉输出差异之外不包括它?这不是一个更大的脚本或任何东西的一部分,我从PowerShell开始,并试图理解一些基本的复杂性。我理解使用regex部分进行拆分

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!