निम्नलिखित कोड खंडों उत्पादन सच:
$x = ($false -eq "")
Write-Host $x
$x = ($false -eq 0)
Write-Host $x
$ झूठे और "" विभिन्न डेटा प्रकार, चाहिए नहीं तो वह अपने आप कर रहे हैं बराबर झूठे के बाद से?
निम्नलिखित कोड खंडों उत्पादन सच:
$x = ($false -eq "")
Write-Host $x
$x = ($false -eq 0)
Write-Host $x
$ झूठे और "" विभिन्न डेटा प्रकार, चाहिए नहीं तो वह अपने आप कर रहे हैं बराबर झूठे के बाद से?
तुलना संचालन करते समय, पावरशेल स्वचालित रूप से ऑपरेटर के दाईं ओर ऑब्जेक्ट को बाएं हाथ के प्रकार से मिलान करने के लिए ऑब्जेक्ट को कॉरर्स करने का प्रयास करेगा।
[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
मूल्यांकन करता है।
उत्तर के लिए धन्यवाद। लेकिन जब आप "शून्य स्ट्रिंग" कहते हैं तो आपका मतलब खाली स्ट्रिंग है, है ना? क्योंकि एक नल स्ट्रिंग और खाली स्ट्रिंग दो अलग-अलग चीजें हैं। –
तकनीकी रूप से वे अलग-अलग चीजें हैं, लेकिन जब कोई [बूल] के रूप में डाला जाता है तो कोई भी $ झूठी का मूल्यांकन करेगा। – mjolinor
पावरशेल 0 लंबाई स्ट्रिंग में गलत के रूप में मूल्यांकन किया जाता है। [यह] (http://blogs.msdn.com/b/powershell/archive/2006/12/24/boolean-values-and-operators.aspx) इसका उल्लेख करता है लेकिन मैं कुछ और ढूंढ रहा हूं। – Matt
यदि आप '(" "-eq $ false) करते हैं तो परिणाम गलत है। – Richard
यह सही है। जवाब बताता है क्यों। – Matt