Конструкции -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 в действии, второе издание (Kindle Location 3391).
Давайте поговорю о наиболее спорном проектном решении в Язык PowerShell.
И победитель: почему, черт возьми, мы не использовали обычные символы для сравнения, такие как > , > =, <, < =, == и and = =.
Ответ заключается в том, что > и < символы используются для перенаправления вывода. Потому как PowerShell - это оболочка и все языки оболочки за последние 30 лет использовали > и < для перенаправления ввода-вывода люди ожидали, что PowerShell должен делать то же самое. Во время первой публичной бета-версии PowerShell это тема вызвала дискуссии, которые продолжались в течение нескольких месяцев.
Мы посмотрели различные альтернативы, такие как модальный синтаксический анализ, где иногдa > означает больше, а иногда и перенаправление. Мы посмотрели альтернативные последовательности символов для операторов типа: > или → , либо для перенаправления или сравнения. Мы провели тесты на удобство и провели фокус-групп, и, в конце концов, остановились на том, с чего мы начали.
Операторы перенаправления: > и <, а операторы сравнения взятой из команды Unix test (1). Мы ожидаем, что, поскольку эти операторы имеют 30-летнюю родословную, они адекватны и уместны для использовать в PowerShell. (Мы также ожидаем, что люди будут продолжать жалуйтесь на это решение, хотя, надеюсь, не на 30 лет.)
Потому что >
и <
являются операторами перенаправления потоков в большинстве оболочек. Ну, кроме того, что PowerShell не поддерживает перенаправление ввода потока. В противном случае было бы труднее разобрать/интерпретировать >
в некоторых случаях для перенаправления stdout и в других случаях greater than
. Кроме того, используя подход -<operator_name>
, вы можете иметь гораздо больше операторов, чем есть интуитивные символы, например. -contains, -notcontains, -is, -replace, -split, -match и т.д. Выполнить man about_operators
в качестве отправной точки для проводника всех операторов, поддерживаемых PowerShell.
Оператор = уже является оператором присваивания. Чтобы не путать сравнение и оператор присваивания, они выбирают для другого оператора. В этом случае для -eq, поскольку он уже используется в других (UNIX) языках сценариев.