Powershellのリテラルエスケープ文字とは何ですか?


51

Powershellで引用符付き文字列内にリテラル引用文字を含めるとき、引用文字をエスケープして文字列デリミタではなくリテラルであることを示すにはどうすればよいですか?

回答:


75

から help about_quoting_rules

文字列に二重引用符を表示するには、文字列全体を単一引用符で囲みます。例えば:

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

このコマンドの出力は次のとおりです。

As they say, "live and learn."

単一引用符で囲まれた文字列を二重引用符で囲まれた文字列で囲むこともできます。例えば:

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

このコマンドの出力は次のとおりです。

As they say, 'live and learn.'

Windows PowerShellに二重引用符を文字どおりに解釈させるには、バックティック文字を使用します。これにより、Windows PowerShellは引用符を文字列区切り文字として解釈しなくなります。例えば:

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

このコマンドの出力は次のとおりです。

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

単一引用符で囲まれた文字列の内容は文字どおりに解釈されるため、バッククォート文字を使用して、単一引用符で囲まれた文字列でリテラル文字の解釈を強制することはできません。

PowerShellの最近のバージョンでは、一重引用符で囲まれた文字列内の他の引用符をエスケープするためにバックティック文字を使用することはサポートされていません。PowerShellの以前のバージョンでは、バックティックエスケープ文字を使用してhelp about_quoting、これらのバージョンのPowerShellで利用可能なドキュメントで詳述されているように、単一引用符で囲まれた文字列内の二重引用符文字をエスケープできました。


2
ただのメモですが、一重引用符をエスケープできないように見えます最後の例は無効です。あなたの投稿から何かが変わったのかもしれません、私もそのabout_quoting助けを見つけることができません。powershell v5.1を実行しています。二重引用符のエスケープ、または異なるタイプの引用符のネストは、期待どおりに機能します。
カルゼクドール

1
興味深い-単一引用符のエスケープのサポートはバグのように見えます。about_quotingヘルプファイルはabout_quoting_rulesに置き換えられ、単一引用符で囲まれた文字列はリテラルであるため、バックティックを使用してPowerShell v5で単一引用符をエスケープできないことを明確に示しています。これはV3では異なっていました。
ヘルヴィック

1
SQLのように、単一引用符は単一引用符で囲まれた文字列で二重化することでエスケープされることに注意してください。したがって、'As they say, ''live and learn.'''出力As they say, 'live and learn.'は、2番目の例と同じです。
ブリアナリー

13

Powershellのエスケープ文字は "` "(後方アポストロフィ/墓)です。

これは、引用符と特殊文字をエスケープするために使用できます(たとえば、タブは `t)。


2
これはおそらくbashユーザーを狂気に駆り立てるでしょう。(cmd.exeエスケープ文字は^
悲しみ2009

2
まあ、目を細めるとバックスラッシュのように見えます。
koenigdmj 09

10

ここですでに提供されている内容を補完するために、引用自体で引用(単一または二重)をエスケープできることも知っておく必要があります。つまり、これを行うことができます。

「「 "二重引用符で囲まれた文字列"」の例です。」

この:

「今回は ''シングルクォート ''です。」

この構文が提供する利点はシンプルです。バッククォートで引用をエスケープするよりも、同じ引用を2回入力する方が簡単です。


1

単一の「テキスト」なので、リテラルテキストとして扱われ、「\」を使用して特殊文字をエスケープします

例:この文字列:「彼らが言うように、「生きて学ぶ」。」この文字列になります


1
PowerShellではありません。PS C:\ WINDOWS \ system32> Write-Host '彼らが言うように、\ "生きて学ぶ。\"'彼らが言うように、\ "生きて学ぶ。\"
HopelessN00b

1
@ HopelessN00bは、あまり厳しく判断しないようにしましょう-これPowerShell.exe -Commandは、パラメーターで二重引用符を使用して渡そうとしている場合に機能します(技術的には、CMDがエスケープしていますが、コマンドパラメーターでは有効です)。imgur.com/1btjoQW
jparnell8839
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.