包含运算符逻辑

时间:2015-08-11 11:48:02

标签: powershell

PS U:\> $bookmark = $null    

PS U:\> $XPPS = "145024-9999"

PS U:\> $bookmark += ,("145024-9999",0100,$false)

PS U:\> $bookmark -contains $XPPS
False

起初我很困惑,但后来我运行了这些命令:

PS U:\> $bookmark -contains 100
False

PS U:\> $bookmark -contains $false
False

现在我确定我错过了-contains的一些基本概念,这里有什么问题?

3 个答案:

答案 0 :(得分:3)

“逗号运算符”,创建一个外部数组,因此contains-operator的行为与它应该完全相同。

$XPPS = "145024-9999"
$bookmark = $null
$bookmark += ,("145024-9999",0100,$false)

$bookmark.Count
1

$bookmark[0].Count
3

你看到了问题吗? $bookmark不是ARRAY("145024-9999",0100,$false),而是ARRAY(ARRAY("145024-9999",0100,$false))

$bookmark[0] -contains 100
True

如果您希望书签是单级数组,请删除数组运算符。

$XPPS = "145024-9999"
$bookmark = $null
$bookmark += ("145024-9999",0100,$false)
$bookmark -contains $XPPS

$bookmark -contains $XPPS
True

答案 1 :(得分:2)

将一元,放在一个计算结果为数组的表达式之前会创建一个嵌套数组:

$bookmark += ,("145024-9999",0100,$false)

所以,$bookmark现在是一个包含单个项目的数组(也恰好是一个数组):

PS C:\> $bookmark += ,("145024-9999",0100,$false)
PS C:\> $bookmark[0]
145024-9999
100
False
PS C:\> $bookmark[0][0]
145024-9999
PS C:\> $bookmark[0] -contains $false
True

使用数组子表达式运算符(@())代替:

PS C:\> $bookmark += @("145024-9999",0100,$false)
PS C:\> $bookmark -contains $false
True

答案 2 :(得分:1)

这是因为您使用$bookmark

将另一个数组添加到,(...)

如果您使用[0]访问它,则可以:

$bookmark[0] -contains $XPPS
True