【问题标题】:String comparison in PowershellPowershell 中的字符串比较
【发布时间】:2013-06-20 09:55:30
【问题描述】:

我在 powershell 脚本中有以下代码:

$service = "Letters – Email"

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

$ss
$ss2

$ss2.CompareTo($ss)
$ss -eq $ss2

这个的输出是:

"Letters - Email"
"Letters – Email"
1
False

我不明白输出。你能帮忙吗?

编辑:我发现了问题所在。使用的连字符不同。很抱歉浪费了您的时间。

【问题讨论】:

  • 连字符不止一次地咬过我。尤其是他们em dash 冒充连字符。

标签: windows shell powershell


【解决方案1】:

你的输出没有错,两个字符串不一样:

$ss 有一个- [char]45

$ss2 有一个- [char]8211

stringcompareTo 方法返回这个:

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). 

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

【讨论】:

  • 字符45是hyphen,字符8211是所谓的en dash。它们不仅是不同的字符,而且在印刷上也有不同的含义。
  • @AnsgarWiechers 谢谢我的英语不太好给 [char] 类型命名;)
【解决方案2】:

双引号内的任何变量都将扩展为它们的值,因此当您分配 $ss2 时,$service 变量会扩展为“Letters – Email”,这就是两个变量最终相同的原因。

【讨论】:

  • 但脚本的输出表明它们不相等。扩展是否仅在它们被写入控制台时发生,并且在比较时被忽略?
  • @DanPuzey 他们不是平等的。阅读我的答案。编辑:或编辑的问题:)
猜你喜欢
  • 2023-02-14
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2017-04-17
  • 2013-03-21
相关资源
最近更新 更多