PowerShell でよく使いそうな演算子で私のような普段C#で開発している開発者が忘れやすい演算子を紹介します。
1. 2項演算子
等値とか比較は=や<>ではないのですね。PowerShell を触り始めの私はいきなりはまりました。
比較演算子で頭に -c が付いている場合、大文字、小文字を区別します。 -i が付いている場合は大文字、小文字を区別せずに比較を行います。-cが付与されない場合は通常大文字、小文字を区別せずに比較を行います。
| 比較演算子 | 意味 | 例 |
| -eq, -ceq, -leq |
左の値が右の値と等しい |
1.24 -eq 1.240 "test" -ceq "Test" "test" -ieq "Test" |
| -ne, -cne, -ine | 左の値が右の値と等しくない | 1.24 -ne 1.240 "test" -cne "Test" "test" -ine "Test" |
| -gt, -cgt, -igt | 左の値が右の値より大きい | 1 -gt 2 1 -gt 1 "ame" -cgt "AME" "ame" -igt "AME" |
| -ge, -cge, -ige | 左の値が右の値以上 | 1 -ge 1 3 -ge 1 "ame" -cge "AME" "ame" -ige "AME" |
| -lt, -clt, -ilt | 左の値が右の値より小さい | 1 -lt 2 1 -lt 1 "ame" -clt "AME" "ame" -ilt "AME" |
| -le, -cle, -ile | 左の値が右の値以下 | 1 -le 1 3 -le 1 "ame" -cle "AME" "ame" -ile "AME" |
| -contains, -ccontains, -icontains | 左のコレクションに右の値が含まれる | 1,2,3,4,5 -contains 1 "te","a","01" -contains "te" "te","a","01" -ccontains "tE" "te","a","01" -icontains "tE" |
| -notcontains, -cnotcontains, -inotcontains | 左のコレクションに右の値が含まれない | 1,2,3,4,5 -notcontains 1 "te","a","01" -notcontains "Te" "te","a","01" -cnotcontains "Te" "te","a","01" -inotcontains "Te" |
2. パターン照合演算子
-like, -notlike というSQL の LIKE に相当する演算子を使用することができます。2項演算子と同様に-i が付く場合大文字小文字を区別しません。-c が付く場合、大文字、小文字を区別します。
|
演算子 |
説明 | 例 |
| -like, -clike, -ilike | 左の値が右のワイルドカードパターンに一致する場合$true | 123 -like "[12]23" "Test" -clike "t*" "Test" -ilike "t*" |
| -notlike, -cnotlike, -inotlike | 左の値が右のワイルドカードパターンに一致する場合$false | 123 -notlike "[12]23" "Test" -cnotlike "t*" "Test" -inotlike "t*" |
使用可能なワイルドカードパターンは次のような特殊文字を使用できます。
* : 0個以上の任意の文字に一致
? : 任意の1文字に一致
[a-z] : 連続する文字に一致(左の例の場合はa-zの中の1文字)
[abcd] :abcdのうち1文字に一致
3. 書式指定演算子
Forrmat-List や Format-Table コマンドレットのように全体の整形できます。文字列を整形する場合はSystem.String.Format に該当する処理を -F 演算子で行えます。"{0:###.00}" -F 10.24 のように書式指定して文字列を作成できます。サンプルを記載します。 サンプルでは、"" で囲まれた変数が展開されるサンプルと' (バッククオート) を使用して変数展開をエスケープする例も記載しています。
##
# 書式設定演算子 -F
# Format-List Format-Table ではない
# [string]::Format()メソッドに近いです
"{1} price {0:###.00}" -F 10.235, "自転車"
# ''ではなく""で囲むと勝手に展開されます
$n = "自転車"
$p = 10
"$n price $p"
# バッククオートを使用すると変数展開をエスケープできます
"`$p の値は $p"
4. bit演算子、論理演算し
ビット演算子と論理演算しもC#とは違います。演算子と説明を記載します。
| 演算子 | 説明 |
| -and | 論理積 |
| -or | 論理和 |
| -xor | 排他的論理和 |
| -not | 論理否定 |
| -band | bitごとの論理積 |
| -bor | bitごとの論理和 |
| -bxor | bitごとの排他的論理和 |
| -bnot | bitごとの否定 |
5. バッククオートを使用したエスケープ処理
C#では\ (バックスラッシュ,円マーク) がエスケープ記号として使用されますが、PowerShell の場合 ` (バッククオート) がエスケープ文字として使用されます。以下エスケープ例
| エスケープ文字列 | 説明 |
| `n | 改行 |
| `r | キャリッジリターン |
| `t | タブ |
| `a | アラート |
| `b | バックスペース |
| `' | シングルクオート |
| `" | ダブルクオート |
| `0 | null |
| `' | バッククオート |
6. 正規表現演算子
PowerShell では 正規表現用の演算子も用意されています。通常の.NET の Regex も使えます。先頭の文字が-i, -c の取り扱いはほかの演算子と同じです。-i の場合、大文字小文字を無視。-c の場合考慮されます。 .NET で使用できる正規表現パターンが使用できます。
| 演算子 | 説明 | 例 |
| -match, -cmatch, -imatch |
左の文字に右の正規表現パターン |
"namatamago" -match "Tamago" |
| -notmatch, -cnotmatch, -inotmatch | 左の文字に右の正規表現パターンに 一致する文字列がなければ$true |
"test012" -notmatch "[abc].*" |
| -replace, -creplace, -ireplace | 左の文字列に右の正規表現に一致する 文字列をカンマで区切った右の文字列で置き換える |
"Large Book" -replace "large","small" "Large Book" -creplace "large","small" "Large Book" -ireplace "large","small" |
-match 演算子では、一致したパターンが $matches 変数 に格納されます。マッチをグループ化することも同様にできます。サンプルを掲載します。マッチグループを名前付けするサンプルも掲載しています。正規表現グループに名前をつけると、その名前で一致した文字列を参照できます。
PS C:\> "Large Book" -match "(L.*) (B.*)" True PS C:\> $matches Name Value ---- ----- 2 Book 1 Large 0 Large Book PS C:\> "Large Book" -match "(?<first>L.*) (?<second>B.*)" True PS C:\> $matches.first Large PS C:\> $matches.second Book PS C:\> $matches Name Value ---- ----- second Book first Large 0 Large Book
7. まとめ
説明は以上です。普段スクリプトを使っていない私が、新たに覚えたり、間違えてC#の演算子を使っていしまいそうな演算子を掲載しました。
誤り、指摘時事項などありましたらご連絡ください。