'$null ='在powershell中表示将一个变量赋值为null。

9 浏览
0 Comments

'$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' 是返回找到的匹配吗?
0
0 Comments

在PowerShell中,使用'$null ='可以抑制比较的结果。你可能见过类似的用法,比如:

command | Out-Null

在上述代码中,Out-Null命令用于抑制输出。在某些情况下,你可能也会看到类似的用法:

[void] (...)

基本上,所有这些例子都是做同样的事情,即忽略输出。如果你不使用上述方法之一,结果将会写回到管道中,导致在管道中后续的命令中得到意外的结果。

参见stackoverflow.com/questions/5260125/...

感谢。我记得PowerShell团队的一篇帖子中提到过这个问题(可能是由James Brundage发表的),但我找不到了。

0
0 Comments

在PowerShell中,出现了"$null ="的原因是为了抑制输出。"-match"操作符将返回"True"或"False",将结果赋值给"$null"可以抑制输出。

"(?<>)"正则表达式语法用于创建一个捕获组。在这种情况下,它创建了一个名为"x"的捕获组,用于匹配""和"<.FancyPants>"之间的任意字符。"$matches"变量包含最后一次匹配的信息。捕获组可以通过"$matches.CaptureGroupName"来引用。

下面是一个示例,用于查看"$Matches"变量中的内容:

'123 Main','456 Broadway' | foreach{$_; $null = $_ -match '(?\d+)'; ($Matches | ft *)}

在这个示例中,您可以使用"$Matches.MyMatch"来引用匹配的内容。

因此,"$matches.x"包含当前对象的匹配结果,PowerShell会自动将所有"$matches"的结果集合并为一个大的结果集吗?答案是否定的。我已经更新了我的答案,其中包含一个示例,您可以使用它来查看"$Matches"变量中的内容。

0