为什么在PowerShell中等于“-eq”而不仅仅是“=”?

时间:2012-04-23 23:59:53

标签: powershell syntax

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

if ($true -eq $true){}

但不是

if ($true = $true){}

解释是什么?

3 个答案:

答案 0 :(得分:36)

基本上答案是Unix是如何永远完成它的。果然,如果你编写了一些你将要使用的Bash脚本,那么将PowerShell语法知识一对一地转移到Bash真的很不错。

Bruce Payette的 Windows PowerShell in Action ,第二版(Kindle Location 3391)详细解答了这个问题。

  

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

     

获胜者是:为什么我们不使用常规符号进行比较,例如>,> =,<,< =,==和!=?

     

答案是>和<字符用于输出重定向。因为   PowerShell是过去30年来的shell和所有shell语言   用过>和<对于I / O重定向,人们期望PowerShell   应该这样做。在PowerShell的第一次公开测试期间,这个   主题产生了持续数月的讨论。

     

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

     

重定向运算符>和<,以及比较运算符   取自Unix test(1)命令。我们期待,因为这些   运营商有30年的血统,他们足够适合   在PowerShell中使用。 (我们也期望人们会继续   抱怨这个决定,但希望不会再多30年。)

答案 1 :(得分:7)

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

答案 2 :(得分:2)

operator =已经是赋值运算符。为了不混淆比较和他们为另一个操作员选择的赋值操作符。在这种情况下,对于-eq,因为它已经在其他(UNIX)脚本语言中使用。