【问题标题】:Why is equals "-eq" in PowerShell and not just "="?为什么在PowerShell中等于“-eq”而不仅仅是“=”?
【发布时间】:2012-05-04 14:55:06
【问题描述】:

-ne-eq-gt 的构造看起来至少很奇怪。

if ($true -eq $true){}

但不是

if ($true = $true){}

解释是什么?

【问题讨论】:

    标签: powershell syntax


    【解决方案1】:

    基本上答案是 Unix 一直以来都是这样做的。果然,如果您编写了一些您将使用的 Bash 脚本,并且将您的 PowerShell 语法知识一对一地转移到 Bash 中,这实际上非常好。

    Bruce Payette 的 Windows PowerShell in Action 第二版(Kindle 位置 3391)详细回答了这个问题。

    让我们谈谈最有争议的设计决策 PowerShell 语言。

    赢家是:为什么我们不使用传统符号进行比较,例如 >、>=、

    答案是 > 和 和

    我们看了一个 各种替代方案,例如模态解析,有时 > 意味着 大于,有时它意味着重定向。我们看了 运算符的替代字符序列,如:> 或 ->, 用于重定向或比较。我们进行了可用性测试并持有 焦点小组,最终确定了我们开始的内容。

    重定向运算符是>和

    【讨论】:

      【解决方案2】:

      因为>< 在大多数shell 中都是流重定向运算符。好吧,除了 PowerShell 不支持流输入重定向。除此之外,在某些情况下解析/解释 > 以重定向标准输出和在其他情况下重定向 greater than 会更加困难。此外,通过使用-<operator_name> 方法,您可以拥有比直观符号更多的运算符,例如-contains、-notcontains、-is、-replace、-split、-match等。以man about_operators为起点,探索PowerShell支持的所有运算符。

      【讨论】:

      • 在什么情况下解析>会更困难?
      • if 表达式的范围非常有限。而且我什至无法想到如何将重定向放在那里。
      • 我不认为在这里有更多的运营商是一个有效的论点,我认为组合的方法会更好,以下运营商< > != ==经常使用,值得努力支持它们.
      【解决方案3】:

      运算符 = 已经是赋值运算符。为了不混淆比较和赋值运算符,他们选择了另一个运算符。在本例中为 -eq,因为它已在其他 (UNIX) 脚本语言中使用。

      【讨论】:

      • 终于有人因为使用 '=' 而不是 '==' 而叫出 OP:P
      猜你喜欢
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2021-03-08
      • 1970-01-01
      • 2013-09-05
      相关资源
      最近更新 更多