Jaka jest dosłowna postać ucieczki w PowerShell?


51

Kiedy włączam literę cudzysłowu w łańcuchu cytowanym w programie Powershell, jak mogę uciec od znaku cudzysłowu, aby wskazać, że jest to literał zamiast ogranicznika łańcucha?

Odpowiedzi:


75

Od help about_quoting_rules

Aby znaki podwójnego cudzysłowu pojawiały się w ciągu, umieść cały ciąg w pojedynczych cudzysłowach. Na przykład:

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

Dane wyjściowe tego polecenia to:

As they say, "live and learn."

Możesz także zawrzeć ciąg cudzysłowu w ciągu cudzysłowu. Na przykład:

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

Dane wyjściowe tego polecenia to:

As they say, 'live and learn.'

Aby zmusić program Windows PowerShell do interpretacji podwójnego cudzysłowu dosłownie, użyj znaku wstecznego. Zapobiega to interpretowaniu przez program Windows PowerShell znaku cudzysłowu jako ogranicznika łańcucha. Na przykład:

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

Dane wyjściowe tego polecenia to:

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

Ponieważ treść ciągów pojedynczych jest interpretowana dosłownie, nie można użyć znaku wstecznego, aby wymusić interpretację znaków dosłownych w ciągu pojedynczym.

Użycie znaku wstecznego do zmiany znaku cudzysłowu w ciągach pojedynczych nie jest obsługiwane w najnowszych wersjach programu PowerShell. We wcześniejszych wersjach programu PowerShell znak ucieczki w tył mógł być używany do zmiany znaku podwójnego cudzysłowu w ciągu pojedynczego cudzysłowu, jak opisano szczegółowo w help about_quotingdokumencie dostępnym w tych wersjach programu PowerShell.


2
Notatka, ale wygląda na to, że nie możesz uciec od pojedynczych cudzysłowów. Twój ostatni przykład jest nieprawidłowy. Może coś się zmieniło od twojego postu, ponieważ nie mogę znaleźć tej about_quotingpomocy. Uruchamianie programu PowerShell v5.1. Unikanie podwójnych cudzysłowów lub zagnieżdżanie różnych rodzajów cudzysłowów nadal działa zgodnie z oczekiwaniami.
Kal Zekdor

1
Ciekawe - wydaje się, że obsługa ucieczki pojedynczych cudzysłowów była błędem. Plik pomocy about_quoting został zastąpiony przez about_quoting_rules i wyraźnie mówi, że nie można użyć znaku wstecznego, aby uciec przed pojedynczymi cudzysłowami w programie PowerShell v5, ponieważ ciągi pojedynczych cudzysłowów są literałami. Dobry połów, w V3 było inaczej.
Helvick

1
Zauważ, że pojedyncze cudzysłowy są zastępowane przez podwojenie ich w ciągach pojedynczych cudzysłowów, jak w SQL. W ten sposób 'As they say, ''live and learn.'''wyniki są As they say, 'live and learn.'takie same jak w drugim przykładzie.
Brianary

13

Znakiem ucieczki w programie Powershell jest „(” wstecz apostrof / grób).

Można tego użyć do zmiany cudzysłowów oraz znaków specjalnych (np. Tab to `t).


2
To prawdopodobnie doprowadzi bashużytkowników do szaleństwa. (Postać cmd.exeucieczki to ^)
grawity

2
Cóż, jeśli zmrużysz oczy, będzie to wyglądać jak odwrotny ukośnik.
koenigdmj

10

Aby uzupełnić to, co już tutaj podano, powinieneś również wiedzieć, że możesz uciec od cytatu (pojedynczego lub podwójnego) z samym cytatem. Oznacza to, że możesz to zrobić:

„Oto przykład„ ”cudzysłowu„ ”.”

i to:

„Tym razem jest to„ pojedynczy cytat ”.

Zaleta tej składni jest prosta: łatwiej jest wpisać ten sam cytat dwa razy, niż uniknąć cytatu za pomocą backsticka.


1

pojedynczy „tekst”, dlatego jest traktowany jak tekst dosłowny, a następnie uciec od znaków specjalnych za pomocą „\”

np. Ten ciąg: „Jak mówią” żyj i ucz się. ”„ Staje się tym ciągiem „Jak mówią:„ żyj i ucz się ”.


1
Nie ma go w PowerShell. PS C: \ WINDOWS \ system32> Write-Host 'Jak mówią: „żyj i ucz się. \” „Jak mówią:„ żyj i ucz się. \ ”
HopelessN00b

1
@ HopelessN00b może nie oceniajmy zbyt surowo - to działa, jeśli używasz PowerShell.exe -Commandi próbujesz przekazać podwójne cudzysłowy w parametrze (ponieważ technicznie technicznie jest to CMD, ale jest poprawne w parametrze polecenia). imgur.com/1btjoQW
jparnell8839,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.