ทำไมฉันต้องหลบหนี“ จุด” สองครั้ง?


13

ฉันรู้ว่าเราสามารถหลบหนีอักขระพิเศษเช่น*(){}$มี\เพื่อให้เป็นตัวอักษรถือว่า
ตัวอย่างเช่น\*หรือ\$

แต่ในกรณีที่.ฉันต้องทำสองครั้งอย่าง\\.อื่นก็ถือว่าเป็นตัวละครพิเศษ ตัวอย่าง:

man gcc | grep \\.

ทำไมถึงเป็นเช่นนั้น?


คุณช่วยให้คดีที่คุณต้องหลบหนีสองครั้งได้หรือไม่?
cuonglm

man bash|grep \\.อาจเป็นตัวอย่าง
สมาชิกที่ลงทะเบียน

3
แม่นยำมากขึ้นคุณไม่ต้องหลบหนีจุดสองครั้งคุณหลบหนีตัวละครหลบหนีเพื่อที่จะได้ผ่านไปยัง grep
Cthulhu

5
man gcc | grep '\.'คุณสามารถใช้เครื่องหมายคำพูดเพื่อหลีกเลี่ยงการหลบหนีตัวอักษรทับขวา:
Leonid Beschastny

1
ฉันชอบข้อเสนอแนะของ @ LeonidBeschastny อย่างชัดเจนเพราะมันชัดเจนว่าเกิดอะไรขึ้น
Izkata

คำตอบ:


24

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

ให้แยกตัวอย่างของคุณ:

man gcc | grep \\.

คำสั่งนี้จะตีความโดยสองโปรแกรมล่ามและbash grepการหลบหนีครั้งแรกที่ทำให้เกิดความbashรู้เป็นตัวอักษรเพื่อให้สองคือผ่านสำหรับ\grep

ถ้าคุณหนีเพียงครั้งเดียว\., bashจะได้รู้ว่าจุดนี้เป็นตัวอักษรและผ่านไป. grepเมื่อgrepเห็นสิ่งนี้แสดง.ว่าจุดนั้นเป็นตัวอักษรพิเศษไม่ใช่ตัวอักษร.

ถ้าคุณหนีสองครั้งbashจะผ่านรูปแบบการ\. grepตอนนี้grepรู้ว่ามันเป็นจุดตัวอักษร


: ดังนั้นตัวหนีสำหรับจุดขึ้นอยู่กับจำนวนท่อที่เราใช้หรือไม่ตัวอย่างเช่น cmd | cmd | cmd | cmd \\\\ ถูกต้องหรือไม่ ???
Thushi

6
@Thushi: เลขที่นี้มีอะไรจะทำอย่างไรกับความจริงที่ว่าคุณกำลังใช้ (หรือหลาย ๆ คน) ตัวละครท่อ grep \\. my_fileแต่ใช้แม้สำหรับ commandline ถูกตีความโดยเชลล์โดยใช้คำสั่งแรก\ เพื่อหลีกเลี่ยงคำสั่งที่สองดังนั้น\ คำสั่งหนึ่งจะถูกส่งผ่านไปยัง grep อย่างแท้จริง จุด.ไม่ได้พิเศษกับเชลล์ดังนั้นมันจึงผ่าน verbatim ต่อไป grep แล้วอ่าน (เดี่ยว) และใช้มันเพื่อหลบหนีจุด\ .
Ansgar Esztermann

@ AnsgarEsztermann: ใช่นั่นเป็นเรื่องจริงตรวจสอบแล้วขอบคุณ :)
Thushi

2
ฉันเชื่อว่าคำตอบนั้นค่อนข้างไม่ถูกต้องในข้อความที่กล่าวว่า "การหลบหนีครั้งแรกทำให้เกิดการทุบตีรู้ว่าเป็นตัวอักษรที่สองคือการ grep" ที่จริงแล้วการหลบหนีครั้งแรกนั้นทำให้ทุบตีรู้ว่า \ คือน้อยมากและผ่าน \ เพื่อ grep
คธูลู

@Gououc ฉันไม่คิดว่ามันจะมี echo .ในการทุบตีเพียงแค่ ... สะท้อน.ตัวละครbach
คธูลู
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.