Что такое буквальный escape-символ в 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 escape-символ обратного удара можно было использовать для экранирования символа двойной кавычки в одной строке в кавычках, как подробно описано в 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.', так же, как ваш второй пример.
— brianary

13

Побег символ в Powershell является "` "(обратный апостроф / могила).

Это может быть использовано для экранирования кавычек, а также специальных символов (например, tab это `t).


2
Это, вероятно, сведет с bashума пользователей. ( cmd.exeПобег персонаж ^)
— grawity

2
Что ж, если ты щуришься, то это похоже на обратную косую черту.
— koenigdmj

10

Чтобы дополнить то, что уже было предоставлено здесь, вы также должны знать, что вы можете избежать кавычки (одинарной или двойной) с самой цитатой. Это означает, что вы можете сделать это:

Msgstr "Вот пример строки" "в двойных кавычках" "."

и это:

На этот раз это «одинарные кавычки».

Преимущество этого синтаксиса простое: проще набрать одну и ту же кавычку дважды, чем избежать кавычки с обратной косой чертой.


1

один текст, поэтому он обрабатывается как буквальный текст, а затем экранирует любые специальные символы, используя «\»

например, эта строка: «Как говорится,« живи и учись ».« Становится этой строкой ». Как говорится,« живи и учись ».


1
Не в PowerShell, это не так. PS C: \ WINDOWS \ system32> Write-Host 'Как говорится, \ "живи и учись \". Как говорится, \ "живи и учись. \"
— HopelessN00b

1
@ HopelessN00b, может быть, давайте не будем судить слишком строго - это работает, если вы используете PowerShell.exe -Commandи пытаетесь передать двойные кавычки в параметре (поскольку, технически, это CMD, экранирующий его, но действительный в параметре команды). imgur.com/1btjoQW
— jparnell8839
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.