PowerShell で使用できる引用符などの特殊文字について

概要

PowerShell では、コマンドレットの引数などに使用する引用符 ( "、' など) に、半角文字以外の一部の Unicode 文字を使用することができます。
この影響により、例えば全角の”を文字列として引数に使用する際に意図せず文字列の引用が終端し、引数のエラーになることがあります。

詳細

以下の例では、test string”test string という文字列を変数 $test に代入しようとしますが、”で引用が終端するため、以降の test でエラーが発生します。
例:
PS C:\> $test="test string”test string"
発生場所 行:1 文字:20
+ $test="test string”test string"
+                    ~~~~
式またはステートメントのトークン 'test' を使用できません。
発生場所 行:1 文字:31
+ $test="test string”test string"
+                               ~
文字列に終端記号 " がありません。
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

このエラーを避けるには、文字列として使用したい引用符を個別にエスケープします。
例:
PS C:\> $test="test string`”test string"
PS C:\> $test
test string”test string


PowerShell では、引用符として、次の Unicode 文字が使用できます。

 " U+0022 QUOTATION MARK
 ' U+0027 APOSTROPHE
 ‘ U+2018 LEFT SINGLE QUOTATION MARK
 ’ U+2019 RIGHT SINGLE QUOTATION MARK
 ‚ U+201A SINGLE LOW-9 QUOTATION MARK
 ‛ U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
 “ U+201C LEFT DOUBLE QUOTATION MARK
 ” U+201D RIGHT DOUBLE QUOTATION MARK
 „ U+201E DOUBLE LOW-9 QUOTATION MARK

また、ダッシュ記号として、次の Unicode 文字が使用できます。

 - U+002D HYPHEN-MINUS
 – U+2013 EN DASH
 — U+2014 EM DASH
 ― U+2015 HORIZONTAL BAR

ただし、Get-ChildItem のように、コマンドレットの中に - があるような場合には、ダッシュの使用が期待されない場所のため、U+2013、U+2014 や U+2015 は使用できません。

Windows 8 以降では上記に加え、空白文字として、次の Unicode 文字が使用できます。

   U+0020 SPACE
   U+00A0 NO-BREAK SPACE
 … U+0085 NEXT LINE (NEL)

これらの文字は標準的なコマンドレットの引数として使用することができますが、すべてのコマンドレットの引数で使用できることを保証するものではありません。
コマンドレットは独自に引数を解釈することができるため、各コマンドレットの実装に依存します。

なお、コマンド プロンプトでは Unicode 文字を引用符等に使うことはできません。
プロパティ

文書番号:2918008 - 最終更新日: 2016/09/29 - リビジョン: 1

フィードバック