Справляетесь ли вы с пониманием операторов сравнения в PowerShell, таких как eq
, ne
, ceq
и cne
? Если да, читайте дальше.
Сначала, будучи разработчиком программного обеспечения, я испытал некоторые трудности, когда впервые увидел операторы сравнения в PowerShell, такие как eq
, ceq
, cne
и т. д. Все остальные языки имеют операторы сравнения, но не такие, как в PowerShell. Я был привык к ==
и <>
.
Синтаксис не только выглядит совершенно иначе, чем в типичном языке программирования, но и ведут себя иначе при сравнении наборов значений.
Это довольно сильно запутывало меня, когда я учился PowerShell, но теперь это кажется как старая пивная пословица: приобретенный вкус.
Давайте кратко рассмотрим, что такое оператор сравнения, если вы с ним не знакомы, и поглубже изучим особенности, которые вводит PowerShell. Вскоре вы сможете без проблем использовать операторы в ваших сценариях PowerShell.
Как я уже упоминал, во всех языках программирования и сценарных языках есть операторы сравнения. В их самом простом понимании операторы сравнения необходимы для определения разницы между разными объектами. Они используются для сравнения двух объектов и определения их различий (если они есть).
В случае PowerShell операторы также могут быть использованы для поиска элементов внутри наборов значений.
Для этого поста я рассмотрю операторы равенства и то, как PowerShell их использует. Это eq
и ne
соответственно с их чувствительными к регистру аналогами ceq
и cne
. Для полного списка вы можете зайти на сайт Technet или просто использовать Get-Help about_comparison_operators
в вашей консоли PowerShell.
PowerShell -EQ и -CEQ
Если вам когда-либо понадобится проверить, равен ли один объект другому, вам придется использовать операторы eq
(без учета регистра) или ceq
(с учетом регистра). Эти операторы проверяют значение каждой сущности, которую вы хотите сравнить.
Когда я впервые начал изучать PowerShell, я постоянно делал что-то вроде этого
Скоро вы научитесь не делать этого. Знак =
– это оператор присваивания, а не оператор сравнения. Вы не можете использовать знак =
для сравнения одного значения с другим.
Правильный способ сделать это – определить значение для проверки слева от выражения и использовать оператор eq
. Вот пример использования операторов eq
и ceq
.

Обратите внимание, как eq
вернул логическое значение True
, когда сравнивал нашу переменную с adam
, но ceq
вернул логическое значение False
? Это показывает разницу в чувствительности к регистру между этими двумя операторами.
Это все хорошо и хорошо для скалярных (одиночных) значений, но вы также можете найти все экземпляры определенных значений, используя эти операторы. Например, используйте оператор PowerShell -eq для фильтрации элементов в массиве:

Если у вас есть переменная с коллекцией значений, таких как массив, вы можете использовать eq
и ceq
, чтобы найти все экземпляры значений внутри коллекции.
Обратите внимание, что он нашел все экземпляры целого числа 9, с которым мы пытались сравнить. Я использую этот удобный метод все время.
-NE и -CNE
С другой стороны, у вас есть как ne
, так и cne
. Они точно противоположны eq
и ceq
, но проявляют точно такое же поведение, только противоположное. Они не проверяют равенство, они проверяют неравенство.

I hope this gives a good explanation of the equality comparison operators. This really got me hung up as a newbie and it never really clicked for me until I was just beat into submission by error messages. I hope this post prevents the same beat down I received.