gpt4 book ai didi

powershell - 在 PowerShell 中比较 '1' 和 '_' 会产生意外结果

转载 作者:行者123 更新时间:2023-12-02 01:25:43 24 4
gpt4 key购买 nike

比较“1”和“_”时,我期望的答案是“1”<“_”,因为它们的 Ascii 值分别是 49 和 95。但答案却是相反的。就此而言,即使使用“:”而不是“_”也会产生相同的结果。

[byte][char]'1' -gt [byte][char]'_'
>> False

这是有道理的。但是:

'1' -gt '_'
>> True

如果有任何关于我在这里可能遗漏的内容的指示,我将不胜感激。本质上,我正在寻找一种可靠的方法来按字典顺序比较 powershell 中的字符串。谢谢!

最佳答案

让我们分解一下您的两个示例。

[byte][char]'1' -gt [byte][char]'_'

在此示例中,您将一个字节与一个字节进行比较。需要注意的是,bytechar 都是数值。唯一真正的区别是 char 是 16 位(因此它可以表示 Unicode 字符),而 byte 只有 8 位。将 string 转换为 char 获取字符串中字符的数字表示形式(前提是该字符串仅包含单个字符)。

这意味着 [byte][char]'1' 结果为数字 49[byte][char]'_' 结果为 95。由于 49 不大于 95,因此该表达式的计算结果为 false

现在让我们看一下第二个示例

'1' -gt '_'

在此示例中,您将字符串字符串进行比较。使用 -gt-ge-lt-le 比较两个字符串时,它使用 alphabetical sort order确定表达式应该为 true 还是 false,而不是字符串中字符的数值。如果一个字符串排在另一个字符串之前,则第一个字符串被视为小于第二个字符串,反之亦然。

如果将一些字符串传递给 Sort-Object cmdlet,您会看到此行为。

'1', '2', '3', '_' | Sort-Object
# returns '_', '1', '2', '3'

这意味着您的第二个示例将返回 true,因为在 .NET 实现的排序顺序中,_ 位于 1 之前。

特殊字符的顺序可能会因语言和/或文化而异,因为似乎没有标准,但人们普遍认为特殊字符应排在数字和字母之前。

关于powershell - 在 PowerShell 中比较 '1' 和 '_' 会产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74736437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com