PowerShell Like演算子&その他:スクリプトゲームの強化

多くの他のプログラミング言語と同様に、PowerShellにも様々な比較演算子があります。ただし、他の言語とは異なり、これらの比較演算子は少し変わっています。たとえば、==ではなく、eqを使用します。また、<>ではなく、neを使用します。これは初心者にとっては混乱することがあります。本記事では、PowerShellのような演算子と他の比較演算子について説明します。

eq演算子およびceq演算子を使用した等価性のテスト

PowerShellでは、あるオブジェクトが別のオブジェクトと等しいかどうかを確認するためにeq演算子を使用します。eq演算子は、文字列、ブール値、整数など、多くの種類の単純なオブジェクトを比較します。eq演算子は、結果に応じて真偽値TrueまたはFalseを返します。

-eq演算子は2つの値を比較する必要があります。たとえば、$stringという変数に文字列を代入しました。この変数の値が文字列"PowerShell"と等しいかどうかを確認したい場合、eq演算子を使用します。

以下の例では、変数$stringに値PowerShellを割り当てています。そして、eq演算子を使用して、$stringの値と文字列powershellを比較しています。簡単ですね?でも、実際には同じではありません。

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

=は代入演算子であり、比較演算子ではありません。PowerShellでは、=を使用して1つの値を別の値と比較することはできません。

ceq演算子を使用して大文字と小文字を区別する

上記の例では、eqが真偽値のTrueを返すことに注意してください。これは、文字列が完全に同じではない場合でも発生する動作です。この動作は、eq演算子が大文字と小文字を区別しないためです。大文字と小文字を区別する場合は、ceq演算子を使用します。

以下のコードスニペットでは、ceqの使用例が示されています。PowerShellが大文字と小文字の違いを認識していることに注目してください。

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

neおよびcne演算子による不等号のテスト

eqおよびceq等しいかどうかをテストするのと同様に、PowerShellにはneおよびcneという逆の操作を行う2つの演算子があります。これらの演算子も同じ操作を行いますが、逆の結果を返します。

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演算子を使用する方法について学びましたので、さらに進んで「含有」演算子を紹介します。これらの演算子はcontainsnotcontainsinnotinです。これらの演算子は、コレクションが指定のインスタンスを含んでいるかどうかを示すTrueまたはFalseのブール値を返します。

次の例をご覧ください。この例では、9つの整数を含む配列を作成しています。特定の整数がその配列に含まれているかどうかに対して、簡単なはい/いいえの答えを得るために、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とほぼ同じですが、1つの例外があります。比較する値は右ではなく左側にあります。

$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のマッチング方法について学んできました。これまで使用してきた演算子は、1つの完全な値と他の値を比較していましたが、PowerShellにはもう1つのトリックがあります。ワイルドカードやアスタリスクに基づいて値を比較することもできます。

例えば、文字列の一部しか知らない場合には、eqは使用できません。なぜなら、eqは完全な文字列を知る必要があるからです。PowerShellのlike演算子を使用すると、完全な文字列を知る必要はありません。値が別の値に似ているかどうかをテストするには、知らない部分をワイルドカードで置き換えることができます。

他の演算子と同様に、この機能はコレクションにも適用することができます。

PowerShellのlike演算子と、大文字小文字を区別する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のlike演算子と同様に、matchとそれと反対のnotmatchは、2つの文字列を比較し、ブール値の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のlike演算子やその他の演算子について、単一の値やコレクションに対してそれぞれどのように使用するかを学びました。演算子とスカラーまたはコレクションに基づいて出力が異なる方法を見てきました。

さらに、大文字と小文字を区別する演算子や、正規表現やワイルドカードに基づいてマッチングする方法、特定の値を含むかどうかをテストする包含演算子や特定のオブジェクトに値が存在するかどうかをテストする演算子も見てきました。

PowerShell Like

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