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-подобными сопоставителями.