次の方法で共有


about_Quoting_Rules

トピック
    about_Quoting_Rules

簡易説明
    Windows PowerShell での単一引用符および二重引用符の使用規則について説明します。


詳細説明
    引用符は、リテラル文字列を指定するために使用します。文字列は、単一引用符 (') または二重引用符 (") で囲
    むことができます。
 

    引用符は、here-string を作成する場合にも使用します。here-string は、単一引用符または二重引用符で
    囲まれた文字列であり、その内部では引用符が文字どおりに解釈されます。here-string には、複数の行を含め
    ることができます。here-string 内の行は、引用符で囲まれていない場合でも、すべて文字列として解釈されます。


    リモート コンピューターに適用されるコマンドでは、引用符を使用して、リモート コンピューター上で実
    行されるコマンド部分を指定します。また、リモート セッションでは、引用符を使用して、コマンド内の変
    数をローカル コンピューターとリモート コンピューターのどちらで先に解釈するかを指定します。


 単一引用符または二重引用符で囲まれた文字列

      文字列を二重引用符で囲むと、文字列がコマンドに渡されて処理される前に、ドル記号 ($) で始まる変数名が変数の値
      に置き換えられます。
 

      次にその例を示します。

          $i = 5
          "The value of $i is $i."


      このコマンドの出力は次のようになります。

          The value of 5 is 5.


      また、二重引用符で囲まれた文字列内では、式が評価され、結果が文字列に挿入されます。次にその例を示します。

      "The value of $(2+3) is 5."


      このコマンドの出力は次のようになります。

      The value of 5 is 5.


      文字列を単一引用符で囲むと、その文字列が入力したとおりにコマンドに渡されます。
      置き換えは行われません。次にその例を示します。

          $i = 5
          'The value of $i is $i.'


      このコマンドの出力は次のようになります。

          The value $i is $i.


      同様に、単一引用符で囲まれた文字列内の式は評価されません。
      リテラルとして解釈されます。次にその例を示します。

      'The value of $(2+3) is 5.'


      このコマンドの出力は次のようになります。

      The value of $(2+3) is 5.


      二重引用符で囲まれた文字列内で変数値の置き換えが行われないようにするには、Windows PowerShell の
      エスケープ文字であるアクサン グラーブ文字 (`) (ASCII 96) を使用します。


      次の例では、アクサン グラーブ文字が最初の $i 変数の前にあるので、変数名は値で置き換えられません。次にその例
      を示します。

          $i = 5
          "The value of `$i is $i."


      このコマンドの出力は次のようになります。

          The value $i is 5.
     
    
      二重引用符が文字列に表示されるようにするには、文字列全体を単一引用符で囲みます。次にその例を示します。

          'As they say, "live and learn."'


      このコマンドの出力は次のようになります。

          As they say, "live and learn."


      単一引用符で囲まれた文字列を二重引用符で囲まれた文字列に入れることもできます。次にその例を示します。

          "As they say, 'live and learn.'"


      このコマンドの出力は次のようになります。

          As they say, 'live and learn.'


      または、二重引用符で囲まれた語句をさらに引用符で囲みます。次にその例を示します。

          "As they say, ""live and learn."""


      このコマンドの出力は次のようになります。

          As they say, "live and learn."


      単一引用符で囲まれた文字列に単一引用符を含めるには、単一引用符を連続させます。次にその例を示します。

          'don''t'


      このコマンドの出力は次のようになります。

          don't


      Windows PowerShell で二重引用符を文字どおりに解釈させるには、アクサン グラーブ文字を使用し
      ます。アクサン グラーブ文字を使用すると、引用符は文字列の区切り記号として解釈されません。次にそ
      の例を示します。

          "Use a quotation mark (`") to begin a string."


      単一引用符で囲まれた文字列の内容は文字どおりに解釈されるので、単一引用符で囲まれた文字列内で文字
      を文字どおりに解釈させるために、アクサン グローブ文字を使用することはできません。

 
      たとえば、次のコマンドを使用すると、エラーが発生します。Windows PowerShell でエスケープ文
      字が認識されないためです。代わりに、Windows PowerShell は 2 つ目の引用符を文字列の終端と解
      釈します。


      PS C:\> 'Use a quotation mark (`') to begin a string.'
          式またはステートメントのトークン ')' を使用できません。
          行:1 文字:27
          + 'Use a quotation mark (`') <<<< to begin a string.'


 単一引用符または二重引用符で囲まれた here-string

      here-string の引用符の規則は、若干異なります。


      here-string は、単一引用符または二重引用符で囲まれた文字列であり、その内部では引用符が文字どお
      りに解釈されます。here-string には、複数の行を含めることができます。here-string 内の行は、
      引用符で囲まれていない場合でも、すべて文字列として解釈されます。


      通常の文字列の場合と同様に、二重引用符で囲まれた here-string 内の変数は値に置き換えられます。
      単一引用符で囲まれた here-string 内の変数は、値に置き換えられません。

 
      here-string は任意のテキストで使用できますが、次の種類のテキストでは特に便利です。

          - リテラル引用符を含むテキスト
          - HTML ドキュメントや XML ドキュメント内のテキストなど、複数の行から成るテキスト
          - スクリプトや関数のヘルプ テキスト


      here-string は次のどちらかの形式で作成できます。<Enter> は、Enter キーを押したときに追加されるライ
      ンフィードまたは非表示の改行記号です。
 

      形式 1:

      @"<Enter>
          <string> [string] ...<Enter>
          "@


      形式 2:
 
      @'<Enter>
          <string> [string] ...<Enter>
          '@


      どちらの形式でも、終わりの引用符を行の最初の文字にする必要があります。

   
      here-string では、2 つの非表示の文字の間にすべてのテキストが含まれます。
      here-string では、すべての引用符が文字どおりに解釈されます。
      次にその例を示します。

      @"
      For help, type "get-help"
      "@

    
      このコマンドの出力は次のようになります。

      For help, type "get-help"


      here-string を使用すると、コマンド内で文字列を扱いやすくなります。次にその例を示します。

      @"
          Use a quotation mark (') to begin a string.
          "@

        
      このコマンドの出力は次のようになります。

          Use a quotation mark (') to begin a string.


      単一引用符で囲まれた here-string 内の変数は文字どおりに解釈され、正確に複製されます。次にそ
      の例を示します。

          @'
      The $profile variable contains the path
          of your Windows PowerShell profile.
          '@


      このコマンドの出力は次のようになります。

      The $profile variable contains the path
          of your Windows PowerShell profile.


      二重引用符で囲まれた here-string 内の変数は、値に置き換えられます。次にその例を示します。

      @" 
          Even if you have not created a profile, the path of the 
          profile file is:
          $profile.
          "@

    
      このコマンドの出力は次のようになります。

      Even if you have not created a profile,
      the path of the profile file is:
      C:\Users\User01\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.


      通常、here-string は複数の行を変数に代入するために使用されます。たとえば、次の here-string で
      は、XML のページが $page 変数に代入されます。


        $page = [XML] @"
        <command:command xmlns:maml="https://schemas.microsoft.com/maml/2004/10"
        xmlns:command="https://schemas.microsoft.com/maml/dev/command/2004/10" 
        xmlns:dev="https://schemas.microsoft.com/maml/dev/2004/10">
        <command:details>
                <command:name>
                       Format-Table
            </command:name>
            <maml:description>
            <maml:para>Formats the output as a table.</maml:para>
            </maml:description>
            <command:verb>format</command:verb>
            <command:noun>table</command:noun>
            <dev:version></dev:version>
        </command:details>
        ...
        </command:command>
        "@
   

      here-string は、here-string をハッシュ テーブルに変換する ConvertFrom-StringData
      コマンドレットに入力する場合にも便利な形式です。詳細については、「ConvertFrom-StringData」
      を参照してください。


関連項目
    about_Escape_Characters
    ConvertFrom-StringData