【问题标题】:PowerShell case sensitive alphabet character order?PowerShell区分大小写的字母字符顺序?
【发布时间】:2020-03-20 21:06:14
【问题描述】:

我已经用其他语言编写了相当多的程序,但我对 PowerShell 还是很陌生。我知道比较运算符的区分大小写的版本,但我对某些结果感到紧张..

我假设 PowerShell 在进行字符串比较时使用 ASCII (Unicode) 值,所以我预计

"abc" -clt "ABC"

导致 False - 但它没有

这有一些直观的意义(lower 必须小于 upper ——对吗?),但从 ASCII 的角度来看它没有意义。罗马字母字符的这种情况刚刚被逆转吗?还是有更多的惊喜在等着我?

"#$%" -clt ")*+"

按预期工作(即True)。

编辑 - 我最初的问题包括一个可能会混淆人们的双重否定。以下是一些有助于澄清的示例:

PS> 'A' -clt 'a'
False

PS> 'a' -clt 'A'
True

P> 'A' -cgt 'a'
True

P> 'a' -cgt 'A'
False

【问题讨论】:

  • 我不确定为什么-clt 会以这种方式执行,但-lt 在用于字符串时会使用正确的代码点。
  • 当您选择具有显式大小写的运算符时,您还告诉 PowerShell 为运算符使用特定于字符串的重载,并且它们都默认为字典/字母顺序。按照惯例,按字母顺序排序时,大写字母在其对应的小写字母之前 :)
  • @MathiasR.Jessen 这听起来像是一个答案
  • @MathiasR.Jessen - 但在这种情况下,大写不要在小写之前 - 这就是我问的原因。我可能不应该在我的问题中使用双重否定。 "ABC" -clt "abc" 为假 "abc" -clt "ABC" 为真
  • @TheIncorrigible1 - -lt 不区分大小写。 "abc" -lt "ABC" 是假的 "ABC" -lt "abc" 也是假的——因为它们实际上是等价的

标签: powershell string-comparison case-sensitive


【解决方案1】:

我假设 PowerShell 在进行字符串比较时使用 ASCII (Unicode) 值

它没有:)

PowerShell 中比较运算符的特定于字符串的重载都按字母顺序进行操作,这也意味着大写字母优先于其等效的小写字母。


另一种思考方式:如果您是一名图书管理员,并且必须为两位作者分别将自己命名为 John Doejohn doe 的同一主题的书籍编制索引,那么您可能会将这些书籍放在 John Doe第一个:)

【讨论】:

  • 但他们没有。我对这个问题的双重否定可能混淆了这个问题。小写字母优先(意味着它们被认为小于大写字母) - 这是我困惑的根源
猜你喜欢
  • 2016-04-02
  • 2011-08-14
  • 2023-03-27
  • 1970-01-01
  • 2012-06-25
  • 2014-05-19
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
相关资源
最近更新 更多