如果我执行以下操作
@("a", "b") |
% { if ($_ -match "(?<x>a)") { $matches; } } |
% { [PSCustomObject]$_; }
我得到了
Name Value
---- -----
x a
0 a
但是,如果我明确定义属性:
@("a", "b") |
% { if ($_ -match "(?<x>a)") { $matches; } } |
% { [PSCustomObject]@{x = $_.x} }
我得到了
x
-
a
这里有什么区别,为什么第一次尝试不返回x
作为属性的自定义对象?
答案 0 :(得分:0)
我认为这里发生的事情就是当你这样做时:
@("a", "b") |
% { if ($_ -match "(?<x>a)") { $matches; } } |
% { [PSCustomObject]$_; }
它是否在脚本块中的getenumerator()
上调用$matches
,并将结果发送到管道,而不是将ref发送到哈希表。
[PSCustomObject]$Matches
将实际引用传递给哈希表,它按预期工作。