构造-ne
,-eq
和-gt
看起来至少很奇怪。
if ($true -eq $true){}
但不是
if ($true = $true){}
解释是什么?
答案 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)脚本语言中使用。