Windows Powershell中的字符串比较

Windows Powershell中的字符串比较,windows,shell,powershell,Windows,Shell,Powershell,我在powershell脚本中包含以下代码: $service = "Letters – Email" $ss = "`"Letters - Email`"" $ss2 = "`"$service`"" $ss $ss2 $ss2.CompareTo($ss) $ss -eq $ss2 其输出为: "Letters - Email" "Letters – Email" 1 False 我不理解输出。你能帮忙吗 编辑:我解决了这个问题。使用的连字符不同。很抱歉浪费您的时间。双引号内的任何

我在powershell脚本中包含以下代码:

$service = "Letters – Email"

$ss = "`"Letters - Email`""
$ss2 = "`"$service`""

$ss
$ss2

$ss2.CompareTo($ss)
$ss -eq $ss2
其输出为:

"Letters - Email"
"Letters – Email"
1
False
我不理解输出。你能帮忙吗


编辑:我解决了这个问题。使用的连字符不同。很抱歉浪费您的时间。

双引号内的任何变量都将扩展为其值,因此,当您分配$ss2时,$service变量将扩展为“字母–电子邮件”,这就是为什么两个变量的结果相同。

您的输出中没有任何错误,两个字符串不同:

$ss
有一个
-
[char]45

$ss2
有一个
-
[char]8211

string
compareTo
方法将返回以下内容:

Less than zero 
 This instance is less than strB. 

Zero 
 This instance is equal to strB. 

Greater than zero 
 This instance is greater than strB.

-or- 

strB is a null reference (Nothing in Visual Basic). 

阅读以了解有关string.compareTo方法的更多信息。

但是脚本的输出表明它们不相等。扩展是否只在写入控制台时发生,并在比较时忽略它们?@DanPuzey它们并不相等。读我的答案。编辑:或编辑的问题:)字符45是一个
连字符
,字符8211是一个所谓的
连字符
。它们不仅是不同的字符,在排版上也有不同的含义。@AnsgarWiechers谢谢你,我的英语不太适合给[char]类型命名;)连字符不止一次咬过我。尤其是那些假装是连字符的人。