【发布时间】: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