PowerShell EQ演算子の理解

PowerShellの比較演算子「eq」「ne」「ceq」「cne」などが理解しづらいと感じている場合は、以下をお読みください。

ソフトウェア開発のバックグラウンドから来る私が最初に「え??」と思ったのは、PowerShellの比較演算子「eq」「ceq」「cne」などを初めて見たときでした。他の言語には比較演算子がありますが、PowerShellとは少し異なります。私は「==」や「<>」に慣れていました。

この構文は、通常のプログラミング言語とは全く異なるだけでなく、値のコレクションを比較する際の振る舞いも異なります。

これは、PowerShellの学習中に私を本当に混乱させたものでしたが、今ではあのビールの格言のように感じます。習得すれば使いこなせるようになります。

まず、比較演算子が何かについて簡単に説明し、PowerShellが導入する微妙なニュアンスについてさらに掘り下げていきましょう。すぐには問題なくPowerShellスクリプトで演算子を扱えるようになるでしょう。

先述のように、すべてのプログラミング/スクリプト言語には比較演算子があります。基本的な意味では、比較演算子は異なるものが他のものとどのように比較されるかを評価するために必要です。2つのオブジェクトを取り、それらの2つのオブジェクトの違い(あれば)を見るために使用されます。

PowerShellの場合、演算子は値のコレクション内の要素を検索するためにも使用することができます。

この投稿では、等価演算子とPowerShellの使用方法について説明します。これらはeqne、および大文字小文字を区別する対応する演算子ceqcneです。詳細なリストはTechnetサイトを参照するか、PowerShellコンソールでGet-Help about_comparison_operatorsを使用してください。

PowerShellの-EQと-CEQ

オブジェクトが別のオブジェクトと等しいかどうかを確認する必要がある場合は、eq(大文字小文字を区別しない)またはceq(大文字小文字を区別する)演算子を使用する必要があります。これらの演算子は、比較したい各エンティティの値をテストします。

PowerShellを学び始めた当初、私はよく次のようなことをしました。

$string = 'Adam'
if ($string = 'Adam') {
    'string is equal to Adam'
}

すぐにそれをやめるようにしましょう。=記号は代入演算子であり、比較演算子ではありません。=記号を使用して1つの値を他の値と比較することはできません。

これを正しく行う方法は、式の左側にチェックする値を定義し、eq演算子を使用することです。以下にeqおよびceq演算子の使用例を示します。

PowerShell’s eq vs ceq

eqが変数をadamと比較したときに真の値を返し、ceqが偽の値を返すことに注目してください。これは、2つの演算子の大文字小文字の区別の違いを示しています。

これはすべてスカラー(単一)の値に対しては問題ありませんが、これらの演算子を使用して特定の値のすべてのインスタンスも見つけることができます。たとえば、PowerShellの「-eq」演算子を使用して配列内のアイテムをフィルタリングできます。

Using Eq to search arrays

配列などの値のコレクションを持つ変数がある場合、コレクション内の値のすべてのインスタンスを見つけるために「eq」と「ceq」を使用できます。

比較対象の整数9のすべてのインスタンスが見つかったことに注意してください。私はいつもこの便利な方法を使っています。

「-NE」と「-CNE」

反対側には、「ne」と「cne」の両方があります。これらは「eq」と「ceq」の正反対ですが、まったく同じ動作をし、逆の結果を表示します。等しいかどうかではなく、等しくないかをテストします。

PowerShells ne vs. cne

I hope this gives a good explanation of the equality comparison operators. This really got me hung up as a newbie and it never really clicked for me until I was just beat into submission by error messages. I hope this post prevents the same beat down I received.

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