ตัวอักษรหลบหนีที่แท้จริงใน 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 ตีความเครื่องหมายคำพูดคู่โดยแท้จริงให้ใช้อักขระ backtick สิ่งนี้จะป้องกัน Windows PowerShell จากการตีความเครื่องหมายคำพูดเป็นตัวคั่นสตริง ตัวอย่างเช่น:

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

เอาต์พุตจากคำสั่งนี้คือ:

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

เนื่องจากเนื้อหาของสตริงที่ยกมาเดี่ยวถูกตีความอย่างแท้จริงคุณไม่สามารถใช้อักขระ backtick เพื่อบังคับให้ตีความตัวอักษรในสตริงที่ยกมาเดี่ยว

การใช้อักขระ backtick เพื่อหลีกเลี่ยงเครื่องหมายอัญประกาศอื่น ๆ ในสตริงที่ยกมาเดี่ยวไม่ได้รับการสนับสนุนใน PowerShell เวอร์ชันล่าสุด ใน PowerShell เวอร์ชันก่อนหน้านี้อักขระ backtick escape สามารถใช้เพื่อหลีกเลี่ยงอักขระเครื่องหมายคำพูดคู่ภายในสตริงที่ยกมาเดี่ยวตามรายละเอียดในhelp about_quotingเอกสารที่มีอยู่ใน PowerShell เวอร์ชันเหล่านั้น


2
เพียงแค่ทราบ แต่ดูเหมือนว่าคุณไม่สามารถหลบหนีจากคำพูดเดียวตัวอย่างล่าสุดของคุณไม่ถูกต้อง บางทีบางอย่างมีการเปลี่ยนแปลงตั้งแต่โพสต์ของคุณเป็นฉันไม่สามารถหาที่about_quotingช่วยเหลืออย่างใดอย่างหนึ่ง เล่น powershell v5.1 การหลบเลี่ยงอัญประกาศคู่หรือซ้อนการเสนอราคาประเภทต่าง ๆ ยังคงทำงานตามที่คาดไว้
Kal Zekdor

1
สิ่งที่น่าสนใจ - ดูเหมือนว่าการสนับสนุนสำหรับการหลีกเลี่ยงคำพูดเดียวเป็นข้อผิดพลาด ไฟล์ help about_quoting ถูกแทนที่ด้วย about_quoting_rules และมันบอกไว้อย่างชัดเจนว่าคุณไม่สามารถใช้ backtick เพื่อหลีกเลี่ยงคำพูดเดียวใน PowerShell v5 เพราะสตริงที่ยกมาเป็นตัวเดียว เยี่ยมมากนี่แตกต่างใน V3
Helvick

1
โปรดทราบว่าเครื่องหมายคำพูดเดียวจะถูกหลีกเลี่ยงโดยเพิ่มเป็นสองเท่าในสตริงที่มีเครื่องหมายคำพูดเดียวเช่นเดียวกับใน SQL ดังนั้น'As they say, ''live and learn.'''เอาต์พุตAs they say, 'live and learn.'เช่นเดียวกับตัวอย่างที่สองของคุณ
บาทหลวง

13

ตัวละครที่หลบหนีใน Powershell คือ "` "(อะโพสโทรฟี / หลุมฝังศพย้อนหลัง)

สามารถใช้เพื่อหนีเครื่องหมายคำพูดและอักขระพิเศษ (เช่น tab คือ `t)


2
นี่อาจทำให้bashผู้ใช้เสียสติ (ในcmd.exeตัวหนีเป็น^)
grawity

2
ถ้าคุณเหล่มันก็ดูเหมือนแบ็กสแลช
koenigdmj

10

เพื่อชมเชยสิ่งที่มีอยู่แล้วที่นี่คุณควรรู้ด้วยว่าคุณสามารถหลีกเลี่ยงการพูด (เดี่ยวหรือคู่) ด้วยการพูดเอง นั่นหมายความว่าคุณสามารถทำได้:

"นี่คือตัวอย่างของสตริง" "ที่มีเครื่องหมายคำพูดคู่" "

และนี่:

'คราวนี้มัน' '' คำพูดเดียว ''

ประโยชน์ที่ไวยากรณ์นี้มีให้นั้นง่าย: มันง่ายกว่าที่จะพิมพ์คำพูดเดียวกันสองครั้งมากกว่าที่จะหลีกเลี่ยงการพูดด้วย backtick


1

single 'text' ดังนั้นจึงถือเป็นข้อความตัวอักษรจากนั้นหลีกเลี่ยงอักขระพิเศษใด ๆ ที่ใช้ "\"

เช่นสตริงนี้: "ตามที่พวกเขาพูด" มีชีวิตอยู่และเรียนรู้ "" กลายเป็นสตริงนี้ 'ตามที่พวกเขาพูด \ "มีชีวิตและเรียนรู้ \"


1
ไม่ได้อยู่ใน PowerShell แต่ก็ไม่ได้ PS C: \ WINDOWS \ system32> เขียนโฮสต์ 'ตามที่พวกเขาพูด \ "ใช้ชีวิตและเรียนรู้ \"' ตามที่พวกเขาพูด \ "ใช้ชีวิตและเรียนรู้ \"
HopelessN00b

1
@ HopelessN00b อาจไม่ตัดสินอย่างรุนแรงเกินไป - วิธีนี้ใช้ได้ผลถ้าคุณใช้PowerShell.exe -Commandและพยายามส่งอัญประกาศคู่ในพารามิเตอร์ imgur.com/1btjoQW
jparnell8839
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.