怎么做-join";"工作?

时间:2018-02-06 09:04:48

标签: arrays powershell operators evaluation

This answer包含类似于代码的Powershell,它会拆分$env:path,应用过滤器并将结果放在一起,以将其存储在$env:path中。

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

我正在阅读此代码,然后突然出现了一个狂野的-join ';'。这是如何运作的?这背后的概念是什么?我希望(<expression)最终会成为某个对象,但这就像读<object> -join ';'一样,因此连接部分仍然是一些独立的标记。它是如何评估的?我可以看到它显然是正确的事情&#34;,但它是如何以及为什么有效? Powershell究竟如何评估这条线?对我来说,看起来非常黑暗。

2 个答案:

答案 0 :(得分:4)

如前所述by the docs-Join 运营商主要可以通过两种方式使用:

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

大多数PowerShells运营商以这种方式工作(看起来与方法参数类似)。你在操作符的左侧有一些值并执行一个操作(在这种情况下加入)右边标记,在你的情况下是分号;

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

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

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

答案 1 :(得分:1)

要添加到Clijsters' answer,它是一个作用于字符串数组(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.