Apa karakter pelarian literal di Powershell?

51

Ketika menyertakan karakter kutipan literal di dalam string yang dikutip dalam Powershell, bagaimana cara saya menghindari karakter kutipan untuk menunjukkan bahwa itu adalah literal alih-alih delimeter string?

David Alpert
sumber

Jawaban:

75

Dari help about_quoting_rules

Untuk membuat tanda kutip ganda muncul dalam string, lampirkan seluruh string dalam tanda kutip tunggal. Sebagai contoh:

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

Output dari perintah ini adalah:

As they say, "live and learn."

Anda juga dapat melampirkan string yang dikutip tunggal dalam string yang dikutip ganda. Sebagai contoh:

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

Output dari perintah ini adalah:

As they say, 'live and learn.'

Untuk memaksa Windows PowerShell untuk menafsirkan tanda kutip ganda secara harfiah, gunakan karakter backtick. Ini mencegah Windows PowerShell dari menafsirkan tanda kutip sebagai pembatas string. Sebagai contoh:

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

Output dari perintah ini adalah:

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

Karena isi string yang dikutip tunggal ditafsirkan secara harfiah, Anda tidak dapat menggunakan karakter backtick untuk memaksa interpretasi karakter literal dalam string yang dikutip tunggal.

Penggunaan karakter backtick untuk menghindari tanda kutip lainnya dalam string yang dikutip tunggal tidak didukung di PowerShell versi terbaru. Dalam versi PowerShell sebelumnya, karakter backtick escape dapat digunakan untuk keluar dari karakter tanda kutip ganda dalam string yang dikutip tunggal sebagaimana dirinci dalam help about_quotingdokumen yang tersedia dalam versi PowerShell tersebut.

Helvick
sumber
2
Hanya sebuah catatan, tetapi tampaknya Anda tidak dapat keluar dari tanda kutip tunggal. Contoh terakhir Anda tidak valid. Mungkin ada sesuatu yang berubah sejak posting Anda, karena saya juga tidak dapat menemukan about_quotingbantuan itu. Menjalankan powershell v5.1. Melarikan diri dari tanda kutip ganda, atau menumpuk berbagai jenis kutipan masih berfungsi seperti yang diharapkan.
Kal Zekdor
1
Menarik - tampaknya dukungan untuk keluar dari tanda kutip tunggal adalah bug. File help about_quoting telah digantikan oleh about_quoting_rules dan dikatakan dengan jelas bahwa Anda tidak dapat menggunakan backtick untuk menghindari tanda kutip tunggal di PowerShell v5 karena string yang dikutip tunggal adalah literal. Tangkapan yang bagus, ini berbeda di V3.
Helvick
1
Perhatikan bahwa tanda kutip tunggal diloloskan dengan menggandakannya dalam string dengan tanda kutip tunggal, seperti dalam SQL. Dengan demikian 'As they say, ''live and learn.'''keluaran As they say, 'live and learn.', sama dengan contoh kedua Anda.
brianary
13

Karakter melarikan diri dalam Powershell adalah "` "(tanda kutip / kubur mundur).

Ini dapat digunakan untuk menghindari tanda kutip dan juga karakter khusus (misalnya, tab `t).

Adam Brand
sumber
2
Ini mungkin akan membuat bashpengguna menjadi gila. ( cmd.exeKarakter melarikan diri adalah ^)
grawity
2
Nah, jika Anda memicingkan mata maka itu terlihat seperti garis miring terbalik.
koenigdmj
10

Untuk memuji apa yang telah disediakan di sini, Anda juga harus tahu bahwa Anda dapat menghindari penawaran (tunggal atau ganda) dengan kutipan itu sendiri. Itu berarti Anda dapat melakukan ini:

"Ini contoh" "string yang dikutip ganda" "."

dan ini:

'Kali ini' 'kutip tunggal' '.'

Keuntungan dari sintaks ini adalah sederhana: lebih mudah untuk mengetikkan penawaran yang sama dua kali dari pada menghindari penawaran dengan backtick.

Poshoholic
sumber
1

satu 'teks' sehingga diperlakukan sebagai teks literal, lalu lepas dari setiap karakter khusus menggunakan "\"

mis. String ini: "Seperti kata mereka," hidup dan belajar. "" Menjadi string ini 'Seperti kata mereka, \ "hidup dan belajar. \"'

dvdccd
sumber
1
Tidak di PowerShell, tidak. PS C: ' "hidup dan belajar \" Seperti yang mereka katakan, \' "hidup dan belajar \" \ WINDOWS \ system32> Write-Host Seperti yang mereka katakan, \
HopelessN00b
1
@ HopelessN00b mungkin jangan menilai terlalu keras - ini berfungsi jika Anda menggunakan PowerShell.exe -Commanddan mencoba memberikan tanda kutip ganda dalam parameter (seperti, secara teknis, CMD lolos darinya, tetapi valid dalam parameter perintah). imgur.com/1btjoQW
jparnell8839