Запутался, почему PowerShell рассматривает функцию, отличную от дочернего элемента, даже если тот же тип - PullRequest
2 голосов
/ 25 января 2010

Я запутался в разнице между этими двумя вещами:

$env:path

И

function path {$env:path}
path

Обе возвращаемые строки, согласно get-member. Тем не менее -match не работает одинаково на обоих.

Если я использую -match для $ env: path, он будет работать так, как я ожидал, возвращая true / false Но если я использую -match на пути (новая функция), то он всегда возвращает путь, игнорируя -match.

Я запутался, потому что обе строки возвращаются и поэтому должны работать одинаково. Должна ли функция делать что-то особенное, чтобы получить тот же результат?

Ответы [ 2 ]

5 голосов
/ 25 января 2010

Дэвид прав. Разница в том, что -match рассматривается как параметр функции path. Таким образом,

$(path) -match "foo"

или

(path) -match "foo" 

работает одинаково хорошо. Первый - это подвыражение, второй - вложенный конвейер (обычно такой же эффект в подобных случаях, но есть небольшие различия).

Проверка:

ps> function path {$env:path; write-host "parameters: $args"}
ps> path -match "foo"
(env:path expanded)
parameters: -match foo

-Oisin

2 голосов
/ 25 января 2010

Вы пробовали что-то вроде

$ (path) -match

Я здесь в Ubuntu, поэтому не могу проверить. $ () Вызывает вычисление выражения, и тогда я считаю, что -match должен работать с возвращаемой строкой

Причина, по которой я предлагаю это, заключается в том, что мне кажется, что если вы не поместите вызов функции в оценщик выражений, -match может рассматриваться как параметр функции path и игнорироваться, поскольку функция path не знаю о -match.

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