จะข้ามการประเมินของเครื่องหมายและในบรรทัดคำสั่งได้อย่างไร


14

เมื่อป้อน URL ของ Google Maps Directions ในบรรทัดคำสั่ง (สำหรับเปิดด้วยโครเมียมเบราว์เซอร์ผ่าน Terminal) จะมีเครื่องหมายและ ( &) ใน URL อย่างไรก็ตามเทอร์มินัลจะแตกเนื่องจากมีสิ่ง Unix เป็น Unix มีบางอย่างที่ฉันสามารถพิมพ์ลงในเทอร์มินัลว่าเมื่อคำสั่งผ่านไปจริง ๆ มันจะได้รับการปฏิบัติเหมือนเครื่องหมายและ?

ความประสงค์; งาน?

คำตอบ:


16

คุณต้องใส่ที่อยู่ในเครื่องหมายคำพูด:

chromium-browser 'http://whatever.com/?x=1&y=2'

ตกลงฉันมีใบเสนอราคาในตอนท้าย แต่ไม่ใช่ใบเสนอราคาด้านหน้า ... ที่อธิบาย ขอขอบคุณ.
Leron

7

เครื่องหมายอัญประกาศจะแก้ไขสิ่งนี้ แต่คุณยังสามารถหลบเลี่ยงสิ่งต่างๆด้วยเครื่องหมายแบ็กสแลช:

echo http://whatever.com/?x=1\&y=2

ไม่ได้บอกว่าสิ่งนี้ดีกว่าไม่ว่าจะด้วยวิธีใดก็เป็นอีกทางเลือกหนึ่งสำหรับสถานการณ์เช่นนี้


1

มันจะไม่สำคัญในกรณีนี้ แต่มีความแตกต่างระหว่างคำพูดเดียวและสองคำพูด

เครื่องหมายอัญประกาศคู่จะแทนที่อักขระพิเศษเช่น '$' และเครื่องหมายอัญประกาศในขณะที่เครื่องหมายอัญประกาศคู่เดียวจะปฏิบัติกับทุกสิ่งอย่างแท้จริงยกเว้นการปิดเครื่องหมายอัญประกาศเดี่ยว

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

นี่แสดงให้เห็นถึงการใช้ '\' เพื่อหลีกเลี่ยงการพูดซ้ำภายในเครื่องหมายคำพูดคู่และเครื่องหมายแบ็กสแลชเอง:

mat@sen:~$ echo "a&bc\\#de\"f"
a&bc\#de"f

ด้วยคำพูดเดียวไม่มีอะไรเปลี่ยนแปลง:

mat@sen:~$ echo 'a&bc\\#de\"f'
a&bc\\#de\"f

หากไม่มีเครื่องหมายอัญประกาศ '&' จะแยกออกเป็นสองคำสั่ง:

mat@sen:~$ echo a&bc\\#de\"f
[1] 2619
a
bc\#de"f: command not found
[1]+  Done                    echo a
[1]+  Done                    echo a

โดยทั่วไปเมื่อต้องจัดการกับการเสนอราคาประเภทหนึ่งคุณก็สามารถสรุปได้ในประเภทอื่น แต่คุณอาจพบปัญหากับสิ่งนี้:

mat@sen:~$ echo "'a'bc$foo"
'a'bc

คำพูดเดียวไม่ได้ทดแทน แต่ '$' คือ ไวยากรณ์ต่อไปนี้ใช้งานได้:

mat@sen:~$ echo $'a\'bc$foo'
a'bc$foo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.