Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Смущен тем, почему PowerShell обрабатывает функцию, отличную от дочернего элемента, даже если тот же тип

Автор вопроса: scobiОтветов: 2

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

$env:path

И

function path {$env:path}
path

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

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

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

powershell

Ответы

Ответ 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 может рассматриваться как параметр функции пути и игнорироваться, поскольку функция пути не знает о -матч.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы