'$null ='在powershell中表示将一个变量赋值为null。
'$null ='在powershell中表示将一个变量赋值为null。
我在最近的Hanselminutes帖子中看到了这个Powershell语句:
cat test.txt | foreach-object {$null = $_ -match '(? .*)<.FancyPants>'; $matches.x} | sort | get-unique
我现在正在努力学习Powershell,我认为我理解了大部分的内容:
- 该语句循环遍历'test.txt'的每一行,并对当前行运行一个正则表达式
- 所有的结果被汇总,然后进行排序和去重
我对该语句的以下部分的理解有些困惑:
$null = $_ -match '(? .*)<.FancyPants>'; $matches.x
- '
$null =
' 这部分代码是做什么的?我猜测这是为了处理没有返回匹配的情况,但我不确定它是如何工作的? - '
$matches.x
' 是返回找到的匹配吗?
在PowerShell中,使用'$null ='可以抑制比较的结果。你可能见过类似的用法,比如:
command | Out-Null
在上述代码中,Out-Null命令用于抑制输出。在某些情况下,你可能也会看到类似的用法:
[void] (...)
基本上,所有这些例子都是做同样的事情,即忽略输出。如果你不使用上述方法之一,结果将会写回到管道中,导致在管道中后续的命令中得到意外的结果。
参见stackoverflow.com/questions/5260125/...
感谢。我记得PowerShell团队的一篇帖子中提到过这个问题(可能是由James Brundage发表的),但我找不到了。
在PowerShell中,出现了"$null ="的原因是为了抑制输出。"-match"操作符将返回"True"或"False",将结果赋值给"$null"可以抑制输出。
"(?<>)"正则表达式语法用于创建一个捕获组。在这种情况下,它创建了一个名为"x"的捕获组,用于匹配"
下面是一个示例,用于查看"$Matches"变量中的内容:
'123 Main','456 Broadway' | foreach{$_; $null = $_ -match '(?\d+)'; ($Matches | ft *)}
在这个示例中,您可以使用"$Matches.MyMatch"来引用匹配的内容。
因此,"$matches.x"包含当前对象的匹配结果,PowerShell会自动将所有"$matches"的结果集合并为一个大的结果集吗?答案是否定的。我已经更新了我的答案,其中包含一个示例,您可以使用它来查看"$Matches"变量中的内容。