2014-09-24 10 views
7

निम्नलिखित कोड खंडों उत्पादन सच:

$x = ($false -eq "") 
Write-Host $x 

$x = ($false -eq 0) 
Write-Host $x 

$ झूठे और "" विभिन्न डेटा प्रकार, चाहिए नहीं तो वह अपने आप कर रहे हैं बराबर झूठे के बाद से?

+2

पावरशेल 0 लंबाई स्ट्रिंग में गलत के रूप में मूल्यांकन किया जाता है। [यह] (http://blogs.msdn.com/b/powershell/archive/2006/12/24/boolean-values-and-operators.aspx) इसका उल्लेख करता है लेकिन मैं कुछ और ढूंढ रहा हूं। – Matt

+2

यदि आप '(" "-eq $ false) करते हैं तो परिणाम गलत है। – Richard

+1

यह सही है। जवाब बताता है क्यों। – Matt

उत्तर

19

तुलना संचालन करते समय, पावरशेल स्वचालित रूप से ऑपरेटर के दाईं ओर ऑब्जेक्ट को बाएं हाथ के प्रकार से मिलान करने के लिए ऑब्जेक्ट को कॉरर्स करने का प्रयास करेगा।

[bool] करने के लिए [string] coercing के मामले में, किसी भी गैर-शून्य स्ट्रिंग $true के रूप में मूल्यांकन करेंगे, और एक अशक्त स्ट्रिंग $false के रूप में मूल्यांकन करेंगे। बूलियन मानों के विभिन्न डेटा प्रकारों के स्वचालित रूपांतरण के बारे में अधिक जानकारी के लिए ब्लॉग पोस्ट Boolean Values and Operators देखें।

यह कभी कभी अप्रत्याशित परिणाम की ओर जाता है:

PS C:\> [bool]"$false" 

True 

$false का स्ट्रिंग मान 'असत्य' है, जो एक गैर-शून्य स्ट्रिंग और जब [bool] वापस करने के लिए डाली $true के लिए मूल्यांकन है।

यह भी तुलना संचालन गैर विनिमेय बनाता है जब ऑपरेंड विभिन्न डेटा प्रकार के होते हैं:

PS C:\>'' -eq $false 
False 
PS C:\>$false -eq '' 
True

पहले इसकी तुलना में मूल्य $false ऑटो डाली आदेश के प्रकार के मिलान करने के लिए एक स्ट्रिंग के लिए है पहला ऑपरेंड (''), इसलिए आप वास्तव में '' -eq 'False' की तुलना कर रहे हैं, जो $false का मूल्यांकन करता है।

दूसरा तुलना स्ट्रिंग '' ऑटो डाली एक बूलियन, ताकि पहले संकार्य ($false) के प्रकार से मेल करने में फिर से है, इसलिए इस समय आप वास्तव में $false -eq $false तुलना कर रहे हैं, जो $true मूल्यांकन करता है।

+0

उत्तर के लिए धन्यवाद। लेकिन जब आप "शून्य स्ट्रिंग" कहते हैं तो आपका मतलब खाली स्ट्रिंग है, है ना? क्योंकि एक नल स्ट्रिंग और खाली स्ट्रिंग दो अलग-अलग चीजें हैं। –

+0

तकनीकी रूप से वे अलग-अलग चीजें हैं, लेकिन जब कोई [बूल] के रूप में डाला जाता है तो कोई भी $ झूठी का मूल्यांकन करेगा। – mjolinor

संबंधित मुद्दे