【问题标题】:How to make `-eq` case sensitive in Powershell?如何在 Powershell 中使 `-eq` 区分大小写?
【发布时间】:2022-06-18 03:24:17
【问题描述】:

Powershell 的about_Comparison_Operators 页面在其"Common features" 部分中以:

默认情况下,字符串比较不区分大小写。

如何更改默认设置?

【问题讨论】:

  • 使用-ceq。大多数操作员都有一个区分大小写的兄弟。它还具有-ieq 以使其不区分大小写,即使它已经是。这只是为了表明作者的意图。
  • 我知道比较运算符的 ci 前缀。该文档暗示-eq 可能会进行区分大小写的比较。我想知道这样做的条件。主要是为了了解使用-eq 进行不区分大小写比较的脚本有多脆弱。
  • 哎呀,我明白了。我不太确定,认为我有线索,但是,我正在洗衣服。让我深入了解它
  • 文档中的措辞可能模棱两可,但确实(并且明智地)使相等比较区分大小写的唯一方法是使用c-prefixed variant -eq 运算符,即-ceq。如果您认为其他人可能会被该措辞所困扰,我鼓励您在 github.com/MicrosoftDocs/PowerShell-Docs/issues/new/choose 上打开一个问题
  • PowerShell 通常是一种不区分大小写的语言,讨人喜欢的答案是,除非您想针对 .NET API 等作为String.Equals

标签: powershell comparison-operators


【解决方案1】:

Powershell 语言规范 3.0 section 7.8 声明:

一些比较运算符(这里写为-op)有两种变体,一种区分大小写(-cop),另一种不区分大小写(-iop)。 -op 版本等同于 -iop。区分大小写仅在比较字符串类型的值时才有意义。在非字符串比较上下文中,这两个变体的行为相同。

因此,正如我在评论中所怀疑的那样,文档中的“默认情况下”很可能是指非前缀运算符变体,而不是某些 Powershell 设置。

即没有办法让-eq 区分大小写。

问题中引用的文档已被改写以消除令人困惑的语言,支持这种理解。

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 2011-10-14
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多