2017-03-02 94 views
0

我想要的結果是一個布爾值$ true或$ falsePowerShell的條件語句返回非布爾結果

$testlist = @("red","orange","green") 
$testlist -eq "green" 

這將導致在$真,而是它會導致「綠色」

對比

$testlist -ne "green" 

返回其他值,除了「綠色」

整潔的功能來查找字符串您正在查找的值,但對實際的條件收益無用,因爲它每次都會導致$ True,因爲它是非零長度值。

+0

謝謝條件操作符返回一個數組的answers.The概念是一個怪胎。 – DHammah

回答

1

您應該測試,如果值是數組中:

$testlist -contains "green" 
+0

嗨,謝謝。我實際上使用的是對象而不是字符串,因爲我試圖用簡化的代碼來說明一個概念。但我想我找到了一個解決方法,結果實際上並不是一個字符串,因爲get-member會指出,它實際上是一個數組,並且可以像這樣操作。 – DHammah

+0

_你應該測試一個值是否在array_中:這就是'-eq'實際上正在做的事情。 – Matt

1

我想要的結果是一個布爾$true$false

那麼你正在運行的代碼可以被評估作爲一個布爾值,你仍然會得到相同的結果。非常多的非零整數和非空字符串將被轉換爲一個布爾值。

PS C:\Users\Matt> $testlist = @("red","orange","green") 
[bool]($testlist -eq "green") 
True 

-eq,和許多其他運營商如-match,與數組和標量值的工作。

雖然它隱藏幕後發生的事情,但它會作爲if聲明發揮作用。

if($testlist -eq "green"){"Green is in there"} 

不確定這是否發生在您身上但是您的代碼的評估方式是PowerShell返回滿足查詢的所有數組成員。再考慮一下這個例子:

PS C:\Users\Cameron> $testlist = @("red","orange","green","green") 
$testlist -eq "green" 
green 
green 

你看到它返回綠色兩次,因爲它在數組中的兩次。

4c74356b41's answer使用-contains數組運算符,它由設計返回一個布爾值。如果你至少有v3,你也可以使用更直觀的-in,它幾乎以相同的方式工作。

"green" -in "red","orange","green" 

我只是想確定你知道發生了什麼事情,並有通常到PowerShell的瘋狂的方法

+0

對bool的演員很聰明,我喜歡;) – 4c74356b41