#: 3 หมายถึงอะไรในคำสั่งเชลล์


29

คู่มือการติดตั้งสำหรับ ack แนะนำให้ติดตั้งสคริปต์ ack โดยใช้คำสั่งนี้:

curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 !#:3 

ฉันคิดว่า!#:3ท้ายที่สุดก็คือการอ้างอิงย้อนกลับบางอย่าง แต่มันหมายถึงอะไร? มีเทียบเท่าใน zsh หรือไม่ Google ไม่ได้มีประโยชน์


5
สมมติว่าทุบตี; man bashจากนั้นค้นหาการขยายประวัติ
Jeff Schaller

1
มันหมายความว่าแมวของฉันเดินข้ามแป้นพิมพ์ในเวลาที่เลวร้ายจริงๆ
IQAndreas

@IQAndreas: อืมมันเป็นคำสั่งที่ถูกต้องเพื่อให้แมวของคุณจะต้องมากพอที่ฉลาดที่จะเอาชนะตรวจจับการพิมพ์แมว เห็นได้ชัดว่านี่ไม่ใช่แมวที่ไร้ประโยชน์ :-) ⁠
G-Man กล่าวว่า 'Reinstate Monica'

คำตอบ:


32

นี่เป็นรูปแบบพิเศษที่ถูกขยายโดยการทุบตี นอกจากนี้ยังใช้งานได้กับ zsh

ตามหน้า man bash (ส่วนขยายประวัติ) รูปแบบจะขยายดังต่อไปนี้:

  • ตัวออกแบบเหตุการณ์ !#หมายถึงบรรทัดคำสั่งทั้งหมดที่พิมพ์ซึ่งเป็นcurl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755
  • :แยกระหว่างตัวกำหนดเหตุการณ์ (ในกรณีนี้คือทั้งบรรทัด) และตัวออกแบบคำ (เลือกส่วนย่อย)
  • ตัวออกแบบคำ 3ซึ่งเลือกคำ / อาร์กิวเมนต์ที่สาม (การนับคำเริ่มที่ศูนย์) ในกรณี~/bin/ackนี้

บรรทัดคำสั่งขั้นสุดท้าย (โดยปกติจะปรากฏก่อนที่จะดำเนินการ) curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 ~/bin/ackเป็น:

สำหรับรายละเอียดโปรดดูคู่มือทุบตีหรือคู่มือ zshที่คล้ายกันมาก


7
ฉันอดไม่ได้ที่จะสงสัยว่าใครคิดว่าฟีเจอร์นี้จะเป็นความคิดที่ดี
Rhymoid

3
@Rhymoid, ฉันไม่ได้ใช้!#มาก แต่!!, !$, !*, !sud:pและอื่น ๆ อีกมากมายทั้งหมดมีประโยชน์มากและฉันจะใช้พวกเขาตลอดเวลา ลองดูunix.stackexchange.com/a/67/135943
Wildcard

11

ในbashมันคือการทดแทนประวัติ (การทดแทนประวัติทั้งหมดเริ่มต้นด้วย!) โดยเฉพาะ!#หมายความว่าทุกอย่างในบรรทัดคำสั่งจนถึงตอนนี้และการเพิ่ม ': 3' หมายถึงคำที่สาม (นับเริ่มต้นที่ 0)

ดังนั้นคำสั่งดังกล่าวแปลลงใน!#:3~/bin/ack

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