PowerShell和-contains运算符

18 浏览
0 Comments

PowerShell和-contains运算符

考虑以下代码片段:

"12-18" -Contains "-"

你可能认为这将评估为true,但实际上不是这样。相反,这将评估为false。我不确定为什么会这样,但确实是这样的。

为了避免这种情况,可以改用以下代码片段:

"12-18".Contains("-")

现在表达式将评估为true。

第一个代码片段为什么会发生这种情况?有没有什么特殊的--Contains不兼容的地方?文档中没有提到任何相关内容。

admin 更改状态以发布 2023年5月22日
0
0 Comments

-Contains实际上是一个集合操作符。如果集合包含该对象,则为真。它不仅限于字符串。

-match-imatch是正则表达式字符串匹配器,并设置自动变量以使用捕获。

-like-ilike是类似SQL的匹配器。

0
0 Comments

-Contains操作符无法进行子字符串比较,匹配必须是完整的字符串,并且用于搜索集合。

从您链接的文档中可以看到:

-Contains
描述:包含操作符。告诉您一个符号值集合是否包含单个测试值。

在您提供的示例中,您正在处理包含一个字符串项的集合。

如果您阅读您链接到的文档,您会看到一个演示此行为的示例:

示例:

PS C:\> "abc", "def" -Contains "def"
True
PS C:\> "Windows", "PowerShell" -Contains "Shell"
False  #Not an exact match

我认为您想要的是-Match操作符:

"12-18" -Match "-"

它返回True

重要提示:正如评论和链接的文档中指出的那样,应该注意-Match操作符使用正则表达式来执行文本匹配。

0