Оператор подобный PowerShell и многое другое: Повысьте эффективность своего сценария

Как и многие другие языки программирования, PowerShell обладает различными операторами сравнения. Однако, в отличие от других языков, эти операторы сравнения могут выглядеть немного странно. Вместо == у вас есть eq. Вместо <>ne. Это может сбить с толку новичков. Давайте рассмотрим оператор сравнения, такой как PowerShell, и другие операторы сравнения в этой статье.

Проверка равенства с использованием операторов eq и ceq

Для проверки того, равен ли один объект другому в PowerShell, используется оператор eq. Оператор eq сравнивает простые объекты многих типов, такие как строки, логические значения, целые числа и так далее. При использовании оператора eq будет возвращено логическое значение True или False в зависимости от результата.

Оператор -eq требует два значения для сравнения. Допустим, вы присваиваете строку переменной с именем $string. Вы хотите сравнить значение этой переменной с строковым значением "PowerShell", чтобы убедиться, что они равны.

В следующем примере вы можете увидеть, что мы присваиваем значение PowerShell переменной $string. Затем, используя оператор eq, пример сравнивает значение $string со строкой powershell. Достаточно просто, верно? Но подождите, они все-таки не совсем одинаковые.

PS> $string = "PowerShell"
PS> $string -eq "powershell"
True

Обратите внимание, что = является оператором присваивания, а НЕ оператором сравнения. Нельзя использовать = для сравнения одного значения с другим в PowerShell.

Проверка регистра с помощью оператора ceq

В приведенном выше примере обратите внимание, как eq возвращает булево значение True, даже когда строки не совпадают точно. Это происходит потому, что оператор eq нечувствителен к регистру. Чтобы проверить совпадение с учетом регистра, используйте оператор ceq. Оператор ceq полностью идентичен eq, за исключением чувствительности к регистру.

Вы можете увидеть пример использования ceq в следующем фрагменте кода. Теперь обратите внимание, что PowerShell видит разницу в регистрах.

PS> $string -ceq "PowerShell"
True 
PS> $string -ceq "powershell"
False

Проверка на неравенство с помощью операторов ne и cne

Точно так же, как eq и ceq проверяют совпадение, в PowerShell есть пара операторов, которые делают точно противоположное, называемых ne и cne. Как и их аналоги, эти два оператора выполняют точно такую же операцию, но противоположную.

PS> $string = "PowerShell"
PS> $string -ne "PowerShell"
False
PS> $string -cne "PowerShell"
False
PS> $string -cne "powershell"
True

Проверка элементов в коллекции

Обычно операторы eq и ceq используются для скалярных или одиночных значений, таких как строки, целые числа и логические значения. Но эти операторы также могут находить экземпляры конкретных значений, содержащихся в коллекции, например, в массиве.

Обратите внимание на пример ниже, в котором мы создаем массив из 12 целых чисел. Возможно, вам захочется найти все экземпляры числа 9 в этом массиве. Нет проблем, используйте оператор eq против массива, чтобы вернуть все экземпляры сравниваемого целого числа.

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -eq 9
9
9
9
9
PS> ($array -eq 9).Count
4

Тестирование коллекций на наличие значений

Поскольку вы только что узнали о том, как использовать оператор eq для поиска экземпляров в массивах, давайте шагнем дальше и познакомимся с операторами “содержания”. Эти операторы – contains, notcontains, in и notin. Эти операторы возвращают логическое значение True или False, указывающее, содержит ли коллекция экземпляр или нет.

Посмотрите на следующий пример. В этом примере мы создаем массив из девяти целых чисел. Если вам нужен простой ответ Да/Нет на вопрос о том, содержит ли этот массив определенное целое число, вы можете получить его, используя операторы contains или notcontains.

PS> $array = @(2,4,5,6,8,8,9,9,9)
PS> $array -contains 9
True
PS> $array -notcontains 9
False
PS> $array -contains 5

Аналогично у вас есть операторы in и notin. Эти операторы почти идентичны contains и notcontains с одним исключением: значение для сравнения находится слева, а не справа.

$array = @(2,4,5,6,8,8,9,9,9)
9 -in $array
True
9 -notin $array
False

Тестирование “Больше чем” с помощью операторов gt и ge

Что происходит, если вам нужно проверить, является ли число (целое число) больше другого числа или, возможно, больше или равно другому числу? Вы будете использовать операторы gt и ge. Эти операторы сравнивают целые числа.

Как и другие операторы, эти операторы возвращают булевые значения True или False, в зависимости от того, больше ли одно целое число другого. Оба эти оператора проверяют, является ли левое целое число большим или большим или равным правому целому числу.

В приведенном ниже примере вы можете увидеть, как ведут себя эти операторы.

PS> 7 -gt 5
True
PS> 7 -gt 7
False
PS> 7 -ge 7
True

Аналогично оператору eq, который позволяет находить экземпляры в коллекциях, вы можете сделать то же самое с операторами ge и gt. PowerShell ищет каждый элемент в коллекции и сравнивает каждое значение с предоставленным вами. Ниже приведен отличный пример этого.

PS> $array =@(1,2,3,4,5,6,7,8,9,9,9,9)
PS> $array -gt 5
6
7
8
9
9
9
9
PS> $array -ge 5
5
6
7
8
9
9
9
9

Проверка “меньше, чем” с использованием операторов lt и le

Аналогично операторам gt и ge, операторы lt и le выполняют ту же функцию, но в противоположном направлении. Операторы lt и le сравнивают два значения, проверяя, является ли целое число слева меньше или меньше или равно целому числу справа.

Как видно в приведенном ниже примере, та же функциональность сравнения каждого значения в коллекции применяется точно так же, как и для gt и ge.

PS> $array =@(1,2,3,4,5,6,7,8,9,10)
PS> $array -lt 5
1
2
3
4
PS> $array -le 5 
1
2
3
4
5

Сопоставление на основе масок с использованием оператора PowerShell Like

До сих пор вы узнали, как выполнять сопоставление 1:1. Все операторы, используемые до этого момента, сравнивали одно целое значение с другим, но у PowerShell есть еще один трюк в рукаве. Вы также можете сравнивать значения на основе подстановочных символов или звездочек.

Допустим, вы знаете только несколько символов строки. Вы не можете использовать eq, потому что eq требует, чтобы вы знали всю строку. Используя оператор подобия PowerShell, вам не нужно знать всю строку. Чтобы проверить, является ли значение подобным другому, вы можете заменить часть, которую вы не знаете, на подстановочный символ.

Как и с другими операторами, эта функциональность может быть применена также и к коллекциям.

Вы можете увидеть пример подобия PowerShell и его чувствительного к регистру “брата” clike ниже.

PS> $string = "PowerShell"
PS> $string -like "*Shell"
True
PS> $array = @("PowerShell","Microsoft")
PS> $array -like "*Shell"
PowerShell
PS> $array -clike "*Shell"
PowerShell

Оператор -notlike возвращает булево значение True, если совпадений не найдено, и False, если есть совпадение. В случае использования против коллекции он вернет все другие значения, не соответствующие установленному образцу справа от оператора -notlike. Для добавления чувствительности к регистру в образец используйте оператор -cnotlike.

$string = "PowerShell" 
$string -notlike "*Shell"
False
$array = @("PowerShell","Microsoft")
$array -notlike "*Shell"
Microsoft
$array -cnotlike "*shell"
PowerShell
Microsoft

Сопоставление на основе регулярных выражений

Оператор, подобный PowerShell, и его родственные элементы очень удобны, но как только вам понадобится более сложное сопоставление, вы можете погрузиться в глубокий, темный мир регулярных выражений (regex). Используя операторы match и notmatch, вы можете выполнять крайне сложное сопоставление строк с использованием regex.

Подобно оператору, подобному PowerShell, операторы match и его противоположный аналог, notmatch, сравнивают две строки и возвращают булево значение True или False. Как и другие операторы, это поведение может быть применено к коллекции, как показано в примере ниже.

PS> $string = "PowerShell"
PS> $string -match "ow"
True 

PS> $array = @("PowerShell","Microsoft")
PS> $array -match "ow"
PowerShell

PS> $string = "PowerShell"
PS> $string -cmatch "po"
False
PS> $string -cmatch "Po"
True

PS> $array = @("PowerShell","Microsoft")
PS> $array -cmatch "Po"
PowerShell

Сводка

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

Кроме того, вы также узнали о операторах с учетом регистра, сравнивающих операторах, как сопоставлять на основе регулярных выражений или шаблонов и операторах вхождения для проверки наличия объекта содержит ли он определенное значение или есть ли значение в определенном объекте.

PowerShell Like

Source:
https://adamtheautomator.com/powershell-like/