-如何加入“;”工作?

How does -join ";" work?

包含类似 Powershell 的代码,可拆分 $env:path、应用过滤器并将结果放在一起,以将其存储在 $env:path.

$path = ($path.Split(';') | Where-Object { $_ -ne 'ValueToRemove' }) -join ';'

我正在阅读这段代码,然后突然出现了一个疯狂的-join ';'。这是如何运作的?这背后的概念是什么?我希望 (<expression) 最终会成为某个对象,但是这就像读取 <object> -join ';',所以连接部分仍然是一些独立的标记。它是如何评价的?我可以看到它显然 "the right thing",但它是如何工作的以及为什么工作? Powershell 究竟如何评估这条线?对我来说看起来像是非常黑暗的魔法。

by the docs所述,-Join 运算符主要有两种使用方式:

-Join <String[]>
<String[]> -Join <Delimiter>

大多数 PowerShell 运算符都以这种方式工作(并且看起来类似于方法参数)。您在运算符的左侧获得了一些值并执行了一个操作(在本例中为连接),右侧标记为 ,在您的例子中为分号 ;

查看帮助(通过键入 Get-Help <section_name>)部分 about_Join and about_Operators

还有一个从文档中复制的很好的例子(不需要事先拆分)是:

PS> $a = "WIND", "S P", "ERSHELL"
PS> $a -join "OW"
WINDOWS POWERSHELL

要添加到 ,它是一个作用于字符串数组 (String[]) 的运算符。运算符后面的字符指定用于连接数组的每个元素的字符。

分解零件:

($path.Split(';')                        # take the *string* $path and split into an *array*.
                                         # do this on the ; character

Where-Object { $_ -ne 'ValueToRemove' }) # exclude the array element which is equal to
                                         # "ValueToRemove" 

-join ';'                                # Join the *array* back into a *string*
                                         # Put ";" between each array element.