PowerShell и оператор-contains
рассмотрим следующий фрагмент:
"12-18" -Contains "-"
вы думаете, что это оценивается в true
, но это не так. Это будет оценено как . Я не знаю, почему это происходит, но это так.
чтобы избежать этого, вы можете использовать это вместо:
"12-18".Contains("-")
теперь выражение будет иметь значение true.
почему первый фрагмент кода ведет себя так? есть ли что-то особенное в -
это не очень хорошо играет с -Contains
? Этот документация ничего об этом не говорит.
3 ответа:
The
-Contains
оператор не выполняет сравнения подстрок, и совпадение должно быть на полной строке и используется для поиска коллекций.из документации, которую вы связали с:
-содержит Описание: оператор сдерживания. указывает, включает ли коллекция опорных значений одно тестовое значение.
в приведенном примере вы работаете с коллекцией, содержащей только одну строку пункт.
если Вы читаете документацию, которую вы связали с вы увидите пример, который демонстрирует это поведение:
примеры:
PS C:\> "abc", "def" -Contains "def" True PS C:\> "Windows", "PowerShell" -Contains "Shell" False #Not an exact match
Я думаю, что вы хотите это
-Match
оператор:"12-18" -Match "-"
возвращает
True
.
-Contains
на самом деле является оператором сбора. Это верно, если коллекция содержит объект. Это не ограничивается строками.
-match
и-imatch
являются сопоставителями строк регулярных выражений и устанавливают автоматические переменные для использования с захватами.
-like
,-ilike
являются SQL-подобными сопоставителями.