PowerShell和-contains运算符

考虑以下代码段:


"12-18" -Contains "-"

您可能以为这是true,但不是。这将评估来false代替。我不确定为什么会这样,但是确实如此。


为了避免这种情况,您可以改用以下方法:


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

现在,表达式将评估为true。


为什么第一个代码段的行为如此?有什么特别之处-不能很好地解决-Contains吗?该文档没有提及任何内容。


慕侠2389804
浏览 838回答 3
3回答

波斯汪

该-Contains运营商没有做串比较和匹配必须是一个完整的字符串,用于搜索集合。从您链接到的文档中:-包含说明:遏制运算符。告诉参考值集合是否包含单个测试值。在您提供的示例中,您正在使用仅包含一个字符串项的集合。如果您阅读了链接到的文档,您将看到一个演示此行为的示例:例子:PS C:\> "abc", "def" -Contains "def"TruePS C:\> "Windows", "PowerShell" -Contains "Shell"False  #Not an exact match我认为您想要的是-Match操作员:"12-18" -Match "-"哪个返回True。重要说明:如注释和链接文档中所指出,应注意,-Match运算符使用正则表达式执行文本匹配。

MMMHUHU

-Contains实际上是一个集合运算符。如果集合包含对象,则为true。它不仅限于字符串。-match和-imatch是正则表达式字符串匹配器,并设置自动变量以与捕获一起使用。-like,-ilike是类似SQL的匹配器。

茅侃侃

您可以使用like:"12-18" -like "*-*"或split为contains:"12-18" -split "" -contains "-"
打开App,查看更多内容
随时随地看视频慕课网APP