Подтвердить что ты не робот

Почему в PowerShell равен "-eq", а не только "="?

Конструкции -ne, -eq и -gt выглядят как-то странно.

if ($true -eq $true){}

но не

if ($true = $true){}

Какое объяснение?

4b9b3361

Ответ 1

В принципе, ответ заключается в том, что Unix сделал это навсегда. Разумеется, если вы напишете несколько сценариев Bash, что вы будете использовать, и на самом деле приятно иметь передачу знаний синтаксиса PowerShell по одному на один на Bash.

Ответы подробно описаны в Bruce Payette Windows PowerShell в действии, второе издание (Kindle Location 3391).

Давайте поговорю о наиболее спорном проектном решении в Язык PowerShell.

И победитель: почему, черт возьми, мы не использовали обычные символы для сравнения, такие как > , > =, <, < =, == и and = =.

Ответ заключается в том, что > и < символы используются для перенаправления вывода. Потому как PowerShell - это оболочка и все языки оболочки за последние 30 лет использовали > и < для перенаправления ввода-вывода люди ожидали, что PowerShell должен делать то же самое. Во время первой публичной бета-версии PowerShell это тема вызвала дискуссии, которые продолжались в течение нескольких месяцев.

Мы посмотрели различные альтернативы, такие как модальный синтаксический анализ, где иногдa > означает больше, а иногда и перенаправление. Мы посмотрели альтернативные последовательности символов для операторов типа: > или → , либо для перенаправления или сравнения. Мы провели тесты на удобство и провели фокус-групп, и, в конце концов, остановились на том, с чего мы начали.

Операторы перенаправления: > и <, а операторы сравнения взятой из команды Unix test (1). Мы ожидаем, что, поскольку эти операторы имеют 30-летнюю родословную, они адекватны и уместны для использовать в PowerShell. (Мы также ожидаем, что люди будут продолжать жалуйтесь на это решение, хотя, надеюсь, не на 30 лет.)

Ответ 2

Потому что > и < являются операторами перенаправления потоков в большинстве оболочек. Ну, кроме того, что PowerShell не поддерживает перенаправление ввода потока. В противном случае было бы труднее разобрать/интерпретировать > в некоторых случаях для перенаправления stdout и в других случаях greater than. Кроме того, используя подход -<operator_name>, вы можете иметь гораздо больше операторов, чем есть интуитивные символы, например. -contains, -notcontains, -is, -replace, -split, -match и т.д. Выполнить man about_operators в качестве отправной точки для проводника всех операторов, поддерживаемых PowerShell.

Ответ 3

Оператор = уже является оператором присваивания. Чтобы не путать сравнение и оператор присваивания, они выбирают для другого оператора. В этом случае для -eq, поскольку он уже используется в других (UNIX) языках сценариев.