1. ホーム
  2. powershell

[解決済み] PowerShellと-contains演算子

2022-03-02 13:28:23

質問

次のスニペットを考えてみましょう。

"12-18" -Contains "-"

と評価されると思うでしょう。 true しかし、そうではありません。これは次のように評価されます。 false の代わりに なぜこのようなことが起こるのかよくわかりませんが、そうなります。

これを避けるには、代わりにこれを使用します。

"12-18".Contains("-")

これで、この式はtrueと評価されます。

なぜ最初のコードスニペットはそのような動作をするのでしょうか?何か特別な - とは相性が悪いので -Contains ? ドキュメント はそれについて何も言及していません。

解決方法は?

その -Contains 演算子は部分文字列の比較を行わず、完全な文字列にマッチする必要があり、コレクションの検索に使用されます。

リンク先のドキュメントから。

-内容 説明 Containment演算子。 参照値のコレクションが単一のテスト値を含むかどうかを指示する。

この例では、1つの文字列項目だけを含むコレクションを扱っています。

リンク先のドキュメントを読めば、この動作を示す例があるはずです。

PS C:\> "abc", "def" -Contains "def"
True

PS C:\> "Windows", "PowerShell" -Contains "Shell"
False  #Not an exact match

あなたが欲しいのは -Match 演算子を使用します。

"12-18" -Match "-"

を返します。 True .

重要です。 コメントでご指摘のとおり、また リンク先ドキュメント の場合、注意すべきは -Match 演算子は 正規表現 を使用してテキストマッチングを行います。