2015/06/08

PowerShell 大文字・小文字を明示的に比較する演算子の使い方~ceq,cne,cgt,clt

先日、基礎固めのためにPowerShellの勉強会を開催しました。
下準備中、「全く知らなかった」事の一つに「頭にcが付く演算子」がありました。
今回は、大文字・小文字の文字列を明示的に比較するPowerShell の演算子をメモ。

比較演算子

PowerShellには様々な演算子があります。
知っているだけでも
  • 比較演算子
  • 文字列演算子
  • 特殊演算子
  • 代入演算子
  • 単項演算子
  • 論理演算子
があり、その中でよく使われるのが比較演算子ではないでしょうか。

比較演算子とは、下記式の-eqを指示し、左辺と右辺の数値が等値かを比較します。
C#等で使う==(等値演算子)と同じですね。
100 -eq 200
-eq以外によく使われる比較演算子は下記の通りです。
演算子意味
-eq等しい
-ne等しくない
-gtより大きい(右辺の数字を含まない)
-ge以上(右辺の数字を含む)
-ltより小さい(右辺の数字を含まない)
-le以下(右辺の数字を含む)

大文字・小文字を明示的に比較したい

もし、文字列の大文字・小文字を明示的に比較したい時はどうするのか?
その場合は、頭に[c]が付いた比較演算子を使用します。
$com1 = "IRON MAIDEN" #大文字
$com2 = "iron maiden" #小文字

#大文字・小文字を比較しないため、結果はTrue
$com1 -eq $com2 #True

#大文字・小文字を明示的に比較するので、結果はFalse
$com1 -ceq $com2 #False
また、全角文字でも比較できます。
$a = "A"
$b = "a"
$a -eq $b #True
$a -ceq $b #False
大文字・小文字を明示的に比較したくない場合は、比較演算子の頭に[i]を付けます。
#大文字・小文字を明示的に比較しない
$com1 -ieq $com2

-clike 演算子は実務で使えそう

頭にcが付く演算子は「どのような時に使うか?」、試した限り-clike演算子は実務で使う可能性がありました。
例えば、
テキスト ファイルに記録された文字列の中から特定のキーワードをチェックしたい
場合です。
テキスト ファイルは、ログ ファイルかもしれませんし、メモ書きかもしれません。
下記は、ブログ記事の文中にキーワード「ESET」が含まれるかを確認するスクリプトです。
#検索対象の文字列
$s = "ESET Smart Securityのファイアウォールに設定したルールが正しくなかったようで"
#キーワード「ESET」が含まれるか確認
$s -clike "*ESET*" #True
余談:cが付く演算子
今回は-eq 演算子と-clike 演算子の説明しましたが、それ以外の演算子でも-cXXXXは存在しいます。
下記はPowerShell v5.0(Windows 10)の候補一覧になりますが、比較演算子以外に文字列演算子でも利用可能でした。
参考にしたいサイト
about_Comparison_Operators - Script Center
スポンサーリンク

スポンサーリンク