This answer包含类似于代码的Powershell,它会拆分$env:path
,应用过滤器并将结果放在一起,以将其存储在$env:path
中。
$path = ($path.Split(';') | Where-Object { $_ -ne 'ValueToRemove' }) -join ';'
我正在阅读此代码,然后突然出现了一个狂野的-join ';'
。这是如何运作的?这背后的概念是什么?我希望(<expression)
最终会成为某个对象,但这就像读<object> -join ';'
一样,因此连接部分仍然是一些独立的标记。它是如何评估的?我可以看到它显然是正确的事情&#34;,但它是如何以及为什么有效? Powershell究竟如何评估这条线?对我来说,看起来非常黑暗。
答案 0 :(得分:4)
如前所述by the docs,-Join
运营商主要可以通过两种方式使用:
-Join <String[]>
<String[]> -Join <Delimiter>
大多数PowerShells运营商以这种方式工作(看起来与方法参数类似)。你在操作符的左侧有一些值并执行一个操作(在这种情况下加入)与右边标记,在你的情况下是分号;
。
查看帮助(通过键入Get-Help <section_name>
)部分about_Join
和about_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.