我发现PowerShell字符串有些不寻常...我希望这只是我所遗漏的东西。这是我找到的。
我从网页上复制了一些数据(如果有人关心,KQL会搜索O365),并且它包含隐藏的控制字符。以下是我将它们存储在PowerShell变量中的两行:
PS C:\Users> $L1 = "(c:c)(date=01/01/2014..11/01/2016)"
PS C:\Users> $L2 = "(c:c)(date=01/01/2014..11/01/2016)"
第二行在"(c:c)"之间有两个隐藏字符(Unicode字符8206)。和#34;(约会和#34;。我相信他们在这篇文章中仍然存在。因此,这两个字符串有不同的长度:
PS C:\Users> $L1.Length
34
PS C:\Users> $L2.Length
36
然而,当我检查它们是否彼此相等时,PowerShell告诉我它们是:
PS C:\Users> $L1 -eq $L2
True
现在,我知道它了解那里存在差异。我可以使用substring方法提取一些字符,并显示子字符串不相等:
PS C:\Users> $L1.Substring(4,8)
)(date=0
PS C:\Users> $L2.Substring(4,8)
)(date
如果我使用-eq运算符来比较这些子字符串,我会得到正确的答案:
PS C:\Users> $L1.Substring(4,8) -eq $L2.Substring(4,8)
False
但是如果我通过改变我抓取的字符数来强制字符串显示,那么我得到相同的6个可见字符,那么PowerShell会告诉我它们是相同的:
PS C:\Users> $L1.Substring(4,6)
)(date
PS C:\Users> $L2.Substring(4,8)
)(date
PS C:\Users> $L1.Substring(4,6) -eq $L2.Substring(4,8)
True
那么,这是预期的行为吗?我错过了什么吗?我编程的时间足够长,以至于我知道字符串处理可能很奇怪......但这超出了我的个人经验。
如果是预期的行为,如何正确比较两个字符串变量以查看它们是否完全相同?