多くの他のプログラミング言語と同様に、PowerShellにも様々な比較演算子があります。ただし、他の言語とは異なり、これらの比較演算子は少し変わっています。たとえば、==
ではなく、eq
を使用します。また、<>
ではなく、ne
を使用します。これは初心者にとっては混乱することがあります。本記事では、PowerShellのような演算子と他の比較演算子について説明します。
eq
演算子およびceq
演算子を使用した等価性のテスト
PowerShellでは、あるオブジェクトが別のオブジェクトと等しいかどうかを確認するためにeq
演算子を使用します。eq
演算子は、文字列、ブール値、整数など、多くの種類の単純なオブジェクトを比較します。eq
演算子は、結果に応じて真偽値True
またはFalse
を返します。
-eq
演算子は2つの値を比較する必要があります。たとえば、$string
という変数に文字列を代入しました。この変数の値が文字列"PowerShell"
と等しいかどうかを確認したい場合、eq
演算子を使用します。
以下の例では、変数$string
に値PowerShell
を割り当てています。そして、eq
演算子を使用して、$string
の値と文字列powershell
を比較しています。簡単ですね?でも、実際には同じではありません。
=
は代入演算子であり、比較演算子ではありません。PowerShellでは、=
を使用して1つの値を別の値と比較することはできません。
ceq
演算子を使用して大文字と小文字を区別する
上記の例では、eq
が真偽値のTrue
を返すことに注意してください。これは、文字列が完全に同じではない場合でも発生する動作です。この動作は、eq
演算子が大文字と小文字を区別しないためです。大文字と小文字を区別する場合は、ceq
演算子を使用します。
以下のコードスニペットでは、ceq
の使用例が示されています。PowerShellが大文字と小文字の違いを認識していることに注目してください。
ne
およびcne
演算子による不等号のテスト
eq
およびceq
が等しいかどうかをテストするのと同様に、PowerShellにはne
およびcne
という逆の操作を行う2つの演算子があります。これらの演算子も同じ操作を行いますが、逆の結果を返します。
コレクション内の項目のテスト
通常、eq
およびceq
演算子は、文字列、整数、ブール値などのスカラーまたは単一の値に使用されます。しかし、これらの演算子は、配列などのコレクション内に含まれる特定の値のインスタンスも見つけることができます。
以下の例では、12個の整数を含む配列を作成しています。おそらく、その配列内の値が9と等しいインスタンスをすべて見つけたいと思うかもしれません。その場合は、配列に対してeq
演算子を使用して比較する整数のすべてのインスタンスを返します。
値の含有をテストするコレクション
配列内のインスタンスを見つけるためにeq
演算子を使用する方法について学びましたので、さらに進んで「含有」演算子を紹介します。これらの演算子はcontains
、notcontains
、in
、notin
です。これらの演算子は、コレクションが指定のインスタンスを含んでいるかどうかを示すTrue
またはFalse
のブール値を返します。
次の例をご覧ください。この例では、9つの整数を含む配列を作成しています。特定の整数がその配列に含まれているかどうかに対して、簡単なはい/いいえの答えを得るために、contains
またはnotcontains
を使用することができます。
同様に、in
およびnotin
演算子もあります。これらの演算子は、contains
およびnotcontains
とほぼ同じですが、1つの例外があります。比較する値は右ではなく左側にあります。
gt
およびge
演算子による「より大きい」のテスト
もし、ある数値(整数)が別の数値よりも大きいか、または同じかどうかをテストする必要がある場合、gt
およびge
演算子を使用します。これらの演算子は整数を比較します。
他の演算子と同様に、これらの演算子は真偽値True
またはFalse
を返します。これは、ある整数が別の整数よりも大きいかどうかに応じています。これらの演算子は、左の整数が右の整数よりも大きいか、またはそれ以上かどうかをテストします。
以下の例では、それぞれの演算子の動作を示しています。
eq
演算子がコレクション内のインスタンスを検索することができるように、ge
およびgt
演算子も同様に使用することができます。PowerShellは、コレクション内の各アイテムを検索し、それぞれの値を提供された値と比較します。以下の素晴らしい例をご覧ください。
lt
およびle
演算子を使用した「未満」のテスト
gt
およびge
演算子と同様に、lt
およびle
演算子も同じ機能を持ち、逆の動作をします。lt
およびle
演算子は、左側の整数が右側の整数よりも小さいか、またはそれ以下かをテストします。
以下の例では、コレクション内の各値を比較する機能がgt
およびge
とまったく同じく適用されることがわかります。
PowerShellのLike演算子を使用したワイルドカードに基づくマッチング
今まで、1:1のマッチング方法について学んできました。これまで使用してきた演算子は、1つの完全な値と他の値を比較していましたが、PowerShellにはもう1つのトリックがあります。ワイルドカードやアスタリスクに基づいて値を比較することもできます。
例えば、文字列の一部しか知らない場合には、eq
は使用できません。なぜなら、eq
は完全な文字列を知る必要があるからです。PowerShellのlike演算子を使用すると、完全な文字列を知る必要はありません。値が別の値に似ているかどうかをテストするには、知らない部分をワイルドカードで置き換えることができます。
他の演算子と同様に、この機能はコレクションにも適用することができます。
PowerShellのlike演算子と、大文字小文字を区別するclike
の例を以下に示します。
演算子-notlike
は、一致が見つからない場合にはブール値True
を返し、一致がある場合にはFalse
を返します。コレクションに対して使用する場合、-notlike
演算子の右側に指定されたパターンに一致しないすべての他の値を返します。パターンに大文字小文字の区別を追加するには、-cnotlike
演算子を使用します。
正規表現に基づくマッチング
PowerShellのような演算子とその関連は便利ですが、より複雑なマッチングが必要になると、正規表現(regex)の深く暗い世界にダイブすることができます。 match
演算子とnotmatch
演算子を使用すると、regexを使用して非常に複雑な文字列のマッチングが可能です。
PowerShellのlike演算子と同様に、match
とそれと反対のnotmatch
は、2つの文字列を比較し、ブール値のTrue
またはFalse
を返します。また、他の演算子と同様に、以下の例のようにコレクションに対しても同じ動作が適用できます。
概要
この記事では、PowerShellのlike演算子やその他の演算子について、単一の値やコレクションに対してそれぞれどのように使用するかを学びました。演算子とスカラーまたはコレクションに基づいて出力が異なる方法を見てきました。
さらに、大文字と小文字を区別する演算子や、正規表現やワイルドカードに基づいてマッチングする方法、特定の値を含むかどうかをテストする包含演算子や特定のオブジェクトに値が存在するかどうかをテストする演算子も見てきました。
