Який буквальний характер втечі у 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.

Оскільки зміст рядків з одним цитуванням інтерпретується буквально, ви не можете використовувати символ "backtick", щоб змусити буквальну інтерпретацію символів у рядку з цитуванням.

В останніх версіях PowerShell не підтримується використання символу backtick для виходу з інших лапок в одинарних рядках, що цитуються. У більш ранніх версіях PowerShell символ втечі "backtick" міг би використовуватися для виходу з подвійного символу лапки в межах одного цитованого рядка, як це детально описано в help about_quotingдокументі, який доступний у цих версіях PowerShell.


2
Просто примітка, але вона здається, що ви не можете уникнути одноцитат. Ваш останній приклад недійсний. Можливо, щось змінилося з часу Вашої публікації, тому що я не можу знайти і цієї about_quotingдопомоги. Запуск Powerhell 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.', те саме, що і ваш другий приклад.
браріана

13

Персонажем втечі в Powershell є "" "(відсталий апостроф / могила).

Це можна використовувати для виходу з лапок, а також спеціальних символів (наприклад, вкладка `t).


2
Це, ймовірно, зведе з bashрозуму користувачів. (Характер cmd.exeвтечі є ^)
grawity

2
Добре, якщо ти косиш, то це схоже на зворотну косу рису.
koenigdmj

10

Щоб зробити комплімент тому, що вже було надано тут, ви також повинні знати, що ви можете уникнути цитати (одинарної чи подвійної) із самою цитатою. Це означає, що ви можете це зробити:

"Ось приклад рядка з подвійним цитуванням" "."

і це:

"Цього разу це'''одноцитування ''."

Перевага, яку надає цей синтаксис, проста: легше набрати одну і ту ж цитату двічі, ніж уникнути цитати за допомогою зворотного вибору.


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.