Меня смущает разница между этими двумя вещами:
$env:path
И
function path {$env:path}
path
Обе возвращаемые строки, согласно get-member. Тем не менее -match не работает одинаково на обоих.
Если я использую -match для $env:path, он работает так, как я и ожидал, возвращая true/false. Но если я использую -match для пути (новая функция), он всегда возвращает путь, игнорируя -match.
Я запутался, потому что обе возвращаемые строки и, следовательно, должны работать одинаково. Нужно ли функции делать что-то особенное, чтобы получить тот же результат?
Ответ 1 · рейтинг 5 · x0n
Дэвид прав. Разница в том, что -match рассматривается как параметр функции пути. Так,
$(path) -match "foo"
or
(path) -match "foo"
одинаково хорошо работает. Первое - это подвыражение, второе - вложенный конвейер (обычно в подобных случаях тот же эффект, но есть небольшие различия).
Проверять:
ps> function path {$env:path; write-host "parameters: $args"}
ps> path -match "foo"
(env:path expanded)
parameters: -match foo
-Ойсин
Ответ 2 · рейтинг 2 · David Gladfelter
Вы пробовали что-то вроде
$(путь) - совпадение
Я здесь на Ubuntu, поэтому не могу проверить. $() вызывает оценку выражения, а затем я считаю, что -match должен работать с возвращаемой строкой.
Причина, по которой я предлагаю это, заключается в том, что мне кажется, что если вы не поместите вызов функции в оценщик выражений, -match может рассматриваться как параметр функции пути и игнорироваться, поскольку функция пути не знает о -матч.