$ null = в PowerShell - PullRequest
       7

$ null = в PowerShell

6 голосов
/ 23 августа 2011

Я видел это заявление Powershell в недавнем сообщении Hanselminutes -

cat test.txt | foreach-object {$null = $_ -match '<FancyPants>(?<x>.*)<.FancyPants>'; $matches.x} | sort | get-unique

В данный момент я пытаюсь изучить Powershell и думаю, что понимаю большинство происходящих событий.on -

  • Оператор проходит по каждой строке 'test.txt' и запускает регулярное выражение для текущей строки
  • Все результаты сопоставляются, затем сортируются и удаляются дубликаты

Похоже, мое понимание этой части утверждения падает -

$null = $_ -match '<FancyPants>(?<x>.*)<.FancyPants>'; $matches.x
  • Что делает часть кода $null =, я подозреваю, что этообрабатывать сценарий, когда не найдено ни одного совпадения, но я не уверен, как это работает?
  • Возвращает ли '$matches.x' найденные совпадения?

Ответы [ 2 ]

8 голосов
/ 23 августа 2011

Да, оператор -match приводит к True или False;присвоение $null подавляет вывод.

Синтаксис регулярного выражения (?<>) создает группу захвата.В этом случае создается группа захвата с именем x для любых символов от <FancyPants> до <.FancyPants>.$matches содержит информацию о матче за последний матч.На группы захвата можно ссылаться как $matches.CaptureGroupName.

Вот пример, который вы можете использовать, чтобы увидеть, что находится в переменной $Matches.

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

В этом примере вы должны использовать $Matches.MyMatch для ссылки на матч.

5 голосов
/ 23 августа 2011

'$ null = ...' используется для подавления результата сравнения.Возможно, вы видели нечто похожее, например:

command | Out-Null

В приведенном выше описании командлет Out-Null используется для подавления вывода.В некоторых случаях вы также можете увидеть это:

[void] (...)

По сути, все примеры делают то же самое, игнорируя вывод.Если вы не используете один из вышеперечисленных результатов, результат будет записан обратно в конвейер, и вы можете получить неожиданные результаты от команд, находящихся далее в конвейере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...