Powershell 테스트 참조 동등성에서 "-eq"를 사용합니까 (예 : C#의 "=="와 유사) 또는 Object.Equals()파워 쉘 테스트에서 -eq 키워드는 동등성을 테스트하거나 Object.Equals()를 사용합니다.
5
A
답변
5
평등에 대한 시험은 그렇게 간단하지입니다.
'a' -eq 'A'
이 true를 리턴한다고 생각하십시오. 즉, PowerShell은 Equals를 호출하는 것 이상의 기능을 수행합니다.
개체에 대해서는 Equals
이 예상대로 호출됩니다.
Add-Type -TypeDefinition @"
using System;
public class X {
public string Property;
public X(string s) {
Property = s;
}
public override bool Equals(object o) {
System.Console.WriteLine("equals on {0}", Property);
return Property == ((X)o).Property;
}
public override int GetHashCode() { return 20; }
}
"@
$o1 = New-Object X 'a'
$o2 = New-Object X 'A'
$o1 -eq $o2
게다가 PowerShell은 변환을 상당히 많이 사용합니다. 따라서 피연산자가 같은 유형이 아닌 경우 오른쪽 피연산자가 왼쪽 피연산자 유형으로 변환됩니다. 그 이유는 '1' -eq 1
가 성공하는 이유입니다.
3
연산자 -eq는 (예 : C#의 "=="와) Object.Equals()와는 아무 관련이 없습니다. 간단한 예 : 대소 문자를 구분하지 않는 문자열 비교를 수행합니다. 실제로, 그것은 커버 아래에서 많은 변환을 수행하고 그 중 일부는, 불행히도, 항상 직관적으로 기대되지 않을 수도 있습니다. 여기
몇 가지 흥미로운 데모# this is False
[ConsoleColor]::Black -eq $true
# this is True
$true -eq [ConsoleColor]::Black