构造用法中的-ne
,-eq
和-gt
看起来至少很奇怪。
if ($true -eq $true){}
但不包括
if ($true = $true){}
请问这个东西的解释是什么?
构造用法中的-ne
,-eq
和-gt
看起来至少很奇怪。
if ($true -eq $true){}
但不包括
if ($true = $true){}
请问这个东西的解释是什么?
基本上答案是Unix一直以来都是这么做的。如果你写一些Bash脚本,那就会使用它,而且将你的PowerShell语法知识一对一地转移到Bash中,实际上非常方便。
在Bruce Payette的 Windows PowerShell in Action ,第二版(Kindle位置3391)中详细回答了这个问题。
让我们谈谈PowerShell语言中最有争议的设计决策。
胜出者是:为什么我们没有使用传统的比较符号 >、>=、<、<=、== 和 != ?
答案是 > 和 < 字符用于输出重定向。因为PowerShell是一个shell,所有在过去30年中的shell语言都使用>和<进行I/O重定向,因此人们期望PowerShell也应该这样做。在PowerShell的第一个公共测试版中,这个话题引发了数月的讨论。
我们考虑了各种替代方案,例如模态解析,其中有时>表示大于,有时表示重定向。我们考虑了运算符的替代字符序列,如:>或->,无论是用于重定向还是比较。我们进行了可用性测试和焦点小组讨论,最终还是决定沿用最初的方案。
重定向运算符为 > 和 <,比较运算符取自Unix test(1)命令。我们认为,由于这些运算符已经有了30年的历史,它们足够适用于在PowerShell中使用。(我们也期望人们将继续对这个决定提出抱怨,但希望不要持续30年以上。)
因为在大多数shell中,>
和<
是流重定向运算符。好吧,除了PowerShell不支持流输入重定向之外。抛开这个问题,有时解析/解释>
以将stdout重定向到其他位置会更加困难,而在其他情况下则表示“大于”。此外,通过使用-<operator_name>
方法,您可以拥有比直观符号更多的运算符,例如-contains,-notcontains,-is,-replace,-split,-match等。执行man about_operators
作为开始探索PowerShell支持的所有运算符的起点。
运算符=已经是赋值运算符。为了不混淆比较和赋值运算符,他们选择另一个运算符。在这种情况下,选择-eq,因为它已经在其他(UNIX)脚本语言中使用。
>
会更加困难? - Restuta