2012-04-23 244 views

回答

34

基本上答案是,它是Unix的是如何永远做到了。果然,如果您编写一些Bash脚本,那么您将使用这些脚本,并且将PowerShell语法知识一对一地传输给Bash实际上很不错。

它在Bruce Payette的Windows PowerShell in Action第二版(Kindle Location 3391)中得到了详细解答。

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

而获胜者是:为什么heck没有使用常规符号进行比较,比如>,> =,<,<,< =,==和!=?

答案是>和<字符用于输出重定向。由于 PowerShell是一个外壳,并在过去30年 所有外壳语言都使用>和<的I/O重定向,人们预期的PowerShell 也应该这样做。在PowerShell的第一次公开测试中,这个 主题引发了几个月的讨论。

我们查看了 各种替代方案,例如模态解析,其中有时>表示 大于 - 有时表示重定向。我们查看了 运营商的替代字符序列,例如:>或 - >, 用于重定向或比较。我们进行了可用性测试,并召集了焦点小组,最终决定了我们开始的工作。

重定向运算符是>和<,比较运算符是 取自Unix测试(1)命令。我们预计,由于这些 运营商有30年的血统,他们是充分,适当的,在PowerShell中 使用。 (我们也希望人们会继续抱怨这个决定,尽管希望不会超过30年。)

6

因为><在大多数壳流重定向操作符。那么,除了PowerShell不支持流输入重定向。除此之外,在某些情况下解析/解释>将更加难以重定向标准输出,并且在其他情况下可能会更难greater than。另外,通过使用-<operator_name>方法,您可以拥有比直觉符号更多的操作符,例如-contains,-notcontains,-is,-replace,-split,-match等。执行man about_operators作为探索PowerShell支持的所有运算符的起点。

+1

在什么情况下解析'>'会更困难? – Restuta 2012-04-24 00:11:53

+0

if表达式的范围非常有限。我甚至不能考虑如何在那里重定向。 – 2012-04-24 00:12:55

+0

我不认为有更多的操作员在这里是一个有效的论点,我认为组合的方法会更好地工作,下面的运营商'< >!= =='经常使用,它是值得的努力来支持他们。 – Restuta 2012-04-24 00:19:24

2

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

+0

最后有人使用'='而不是'=='来调用OP:P – 2017-12-04 21:48:21

相关问题