Powershell 如果 -eq 和 -ieq 不区分大小写并且服务于相同的目的,或者 -ieq 需要在特定场景中使用?

Powershell if -eq and -ieq are case in-sensitive and serves same purpose or -ieq needs to be used in specific scenario?

if ("True" -eq "true") {
  Write-Host "Hello"
} 
else {
  Write-Host "World"
}

输出: “你好”

if ("True" -ieq "true") {
  Write-Host "Hello"
} 
else {
  Write-Host "World"
}

输出: “你好”

如果两者的作用相同,还有必要-ieq吗?

运算符 -ieq 只是 的别名 (另一个名称),用于 -eqequality operator[1],对于字符串比较 case- 不敏感,因为 PowerShell 通常是

因此,-ieq 不是严格需要的,但您可以选择使用它来明确表示 case-insensitivity(i 表示),并将其与-eq 运算符的 -ceq 变体,它区分大小写 c 表示)。

警告i- 和 c- 前缀变体存在于 all 比较操作数,(例如, -imatch / -cmatch), 但 对于像 -eq 这样也使用操作数 除了字符串 的运算符,使用对于non-string操作数,前缀的被忽略;例如,1 -ceq 11 -ieq 11 -eq 1 相同,只需比较 数值 .
[char] 比较是一个 混合 案例:它有 -eq 个变体 mostly行为类似于 strings(case-insensitive,culture-invariant 比较,但是,与字符串不同,字符之间的 Unicode 等价性是 not已识别),而对于 -lt / -gt 变体,它严格执行 ordinal 比较,即 numerical 通过 Unicode 代码点 - 参见.


[1] 从技术上讲,在幕后是相反的:
{ 'True' -eq 'true' }.Ast.EndBlock.Statements[0].PipelineElements[0].Expression.Operator 产生 Ieq.