about_Quoting_Rules
簡単な説明
PowerShell で単一引用符と二重引用符を使用する規則について説明します。
長い説明
引用符は、リテラル文字列を指定するために使用されます。 文字列は、単一引用符 () または二重引用符 ('``") で囲むことができます。
引用符は、 ここの文字列 を作成するためにも使用されます。 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.
単純な変数参照のみを、展開可能な文字列に直接埋め込むことができます。 配列インデックス作成またはメンバー アクセスを使用する変数参照は、部分式で囲む必要があります。 たとえば、次のように入力します。
"PS version: $($PSVersionTable.PSVersion)"
PS version: 5.1.19041.1151
変数名を文字列内の後続の文字から分離するには、中かっこ ({}) で囲みます。 これは、変数名の後にコロン (:) が続く場合に特に重要です。 PowerShell では、スコープ指定子とスコープ指定子の:間$のすべてのものが考慮され、通常は解釈が失敗します。
たとえば、 "$HOME: where the heart is." エラーをスローしますが "${HOME}: where the heart is." 、意図したとおりに動作します。
二重引用符で囲まれた文字列内の変数値が置換されないようにするには、PowerShell エスケープ文字である backtick 文字 (`) を使用します。
次の例では、最初 $i の変数の前にあるバックティック文字を使用すると、PowerShell は変数名をその値に置き換えなくなります。
たとえば、次のように入力します。
$i = 5
"The value of `$i is $i."
このコマンドの出力は次のとおりです。
The value of $i 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.
文字列に引用符文字を含める
文字列に二重引用符を表示するには、文字列全体を単一引用符で囲みます。 たとえば、次のように入力します。
'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."
単一引用符で囲まれた文字列に単一引用符を含めるには、2 つ目の連続する単一引用符を使用します。 たとえば、次のように入力します。
'don''t'
このコマンドの出力は次のとおりです。
don't
PowerShell で二重引用符をリテラルで解釈するように強制するには、バックティック文字を使用します。 これにより、PowerShell は引用符を文字列区切り記号として解釈できなくなります。 たとえば、次のように入力します。
"Use a quotation mark (`") to begin a string."
'Use a quotation mark (`") to begin a string.'
単一引用符で囲まれた文字列の内容はリテラルで解釈されるため、バックティック文字はリテラル文字として扱われ、出力に表示されます。
Use a quotation mark (") to begin a string.
Use a quotation mark (`") to begin a string.
here-strings
ここでの文字列の引用符の規則は少し異なります。
here-string は、記号 (@) で囲まれた単一引用符または二重引用符で囲まれた文字列です。 この文字列内の引用符は、リテラルで解釈されます。
次の文字列:
- 複数行にまたがる
- は、開始マークの後に改行で始まります
- 終わりが改行で終わり、その後に終了マークが続く
- には、1 つの文字列の一部として開始記号と終了マークの間のすべての行が含まれます
通常の文字列と同様に、変数は二重引用符で囲まれた文字列の値に置き換えられます。 単一引用符で囲まれた文字列では、変数は値に置き換えられません。
この文字列は任意のテキストに使用できますが、次の種類のテキストに特に役立ちます。
- リテラル引用符を含むテキスト
- HTML ブロックまたは XML ブロック内のテキストなど、複数行のテキスト
- スクリプトまたは関数ドキュメントのヘルプ テキスト
here-string には、<Enter>Enter キーを押したときに追加される改行文字または改行隠し文字を表す、次のいずれかの形式を指定できます。
二重引用符:
@"<Enter>
<string> [string] ...<Enter>
"@
単一引用符:
@'<Enter>
<string> [string] ...<Enter>
'@
注意
最後の改行文字は、終了マークの一部です。 この文字列には追加されません。
この文字列には、開始記号と終了記号の間のすべてのテキストが含まれます。 この文字列では、すべての引用符がリテラルで解釈されます。 たとえば、次のように入力します。
@"
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.
ここでの単一引用符で囲まれた文字列では、変数はリテラルで解釈され、正確に再現されます。 たとえば、次のように入力します。
@'
The $profile variable contains the path
of your PowerShell profile.
'@
このコマンドの出力は次のとおりです。
The $profile variable contains the path
of your PowerShell profile.
ここで二重引用符で囲まれた文字列では、変数はその値に置き換えられます。 たとえば、次のように入力します。
@"
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\User1\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.
ここでの文字列は、通常、変数に複数の行を割り当てるために使用されます。 たとえば、次の文字列は XML のページを$page変数に割り当てます。
$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://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-strings はコマンドレットへの ConvertFrom-StringData 入力にも便利な形式であり、ここでの文字列をハッシュ テーブルに変換します。
詳細については、「ConvertFrom-StringData」を参照してください。
注意
PowerShell では、二重引用符または単一引用符で囲まれた文字列を、ここに示す文字列の構文を使用せずに複数の行にまたがる @ ことができます。 ただし、完全な文字列構文を使用することをお勧めします。
展開可能な文字列の解釈
展開された文字列は、コンソールに表示される既定の出力と必ずしも同じとは限りません。
配列を含むコレクションは、要素の文字列表現の間に 1 つのスペースを配置することで、文字列に変換されます。 ユーザー設定変数 $OFSを設定することで、別の区切り記号を指定できます。 詳細については、基本設定変数を$OFS参照してください。
他の型のインスタンスは、意味のある表現を提供しない可能性があるメソッドを ToString() 呼び出すことによって文字列に変換されます。 たとえば、次のように入力します。
"hashtable: $(@{ key = 'value' })"
hashtable: System.Collections.Hashtable
コンソールと同じ出力を取得するには、パイプ Out-String先の部分式を使用します。 先頭と末尾の Trim() 空の行を削除する場合は、メソッドを適用します。
"hashtable:`n$((@{ key = 'value' } | Out-String).Trim())"
hashtable:
Name Value
---- -----
key value
引用符で囲まれた文字列を外部コマンドに渡す
一部のネイティブ コマンドでは、引用符文字を含む引数が必要です。 PowerShell は、引用符で囲まれた文字列を外部コマンドに渡す前に解釈します。 この解釈により、外側の引用符文字が削除されます。
この動作の詳細については、 about_Parsing の記事を参照してください。
関連項目
フィードバック
フィードバックの送信と表示