-eq
возвращает разные вещи при применении к разным типам значений.
1,2,3,4,1 -eq 1 # returns @(1, 1)
Таким образом, при применении к массиву с левой стороны, он возвращает все элементы из этого массива, которые равныправый операнд.Он работает как фильтр для массивов (то же самое относится и к другим операторам сравнения, таким как -ne
, -gt
и т. Д.)
@('hello', 'world') -eq 'hello world' # returns nothing
Естественно.
Когда -eq
применяется к одному значению на левой стороне, возвращает $true
или $false
в зависимости от того, равна ли ему правая часть.
Произойдет преобразование типа.Например, если левая часть является строкой, правая часть также преобразуется в строку.
Массивы преобразуются в строку путем преобразования всех их элементов в строку и соединения их с однимпо умолчанию пробел (используемый символ можно изменить с помощью другого $OFS
- см. MSDN , Блог команды Powershell ).
'hello world' -eq @('hello', 'world') # returns true
Естественно.Но:
'hello world' -eq @('hello ', 'world') # returns false, note the space
Используйте .Equals()
, чтобы предотвратить это.
'hello world'.Equals( @('hello', 'world') ) # returns false
(1).Equals("1") # false, too