2014-10-24 1 views
3

powerShell에서 boolean을 문자열과 "-eq"연산자로 비교하면 항상 비교할 때 사용한 것과 동일한 부울을 반환합니다.

예.

$shouldBeFalse = $true -eq "hello" 
$shouldBeTrue = $false -eq "hello" 

변수 $ shouldBeFalse는 $ true입니다. $ shouldBeTrue 변수는 $ false입니다. $ shouldBeFalse은 $ false입니다이 경우

$shouldBeFalse = $true.Equals("hello") 

:

본인은 "같음"방법을 사용했다.

그러나 왜 이런 종류의 결과가 boolean 인 -eq 연산자를 반환합니까?

답변

8

PowerShell을 항상 사용하여 평가합니다 왼쪽 인수의 형태. 왼쪽에 부울 값이 있기 때문에 PowerShell은 -eq으로 평가할 목적으로 "Hello"를 부울로 캐스팅하려고합니다.

따라서 귀하의 경우 "hello"은 길이가 0 인 문자열이 아니므로 부울 값 [bool]"hello"으로 변환되며 True로 평가됩니다. 그 반대라면 비슷한 행동을 보게 될 것입니다. 첫 번째 경우에서 $true

PS C:\> "hello" -eq $true 
False 

PS C:\> [bool]"hello" -eq $true 
True 

은 따라서 거짓 "안녕하세요"와 같지 않는 문자열 "true"로 변환된다. 두 번째 경우에는 "hello"를 부울 값에 캐스트하므로 -eq은 부울 값을 비교합니다. 이것에 관해서 언급 된 이유들로 인해 참으로 평가됩니다.

또 다른 좋은 설명은 귀하의 질문이 중복으로 표시 될 수있는 답변입니다. Why is $false -eq "" true?