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#の演算子を使っていしまいそうな演算子を掲載しました。
誤り、指摘時事項などありましたらご連絡ください。
さんのコメント: さんのコメント: