t\ime
หรือ\cd
(หรือ"tim"e
หรือ'cd'
หรือ${-##*}time
หรือ${-+time}
และทุกชุดอื่น ๆ ของข้อความและการขยายคุณอาจจะคิดว่าในที่สุดจะแก้time
หรือcd
) เป็นว่าวิธีการที่จะเขียนอีกและcd
time
อย่างไรก็ตามในที่สุดก็จะแก้ไขcd
หรือtime
ในเวลาต่อมาของการแยกวิเคราะห์ไวยากรณ์และเปลือก โดยเฉพาะอย่างยิ่งที่เกิดขึ้นนานหลังจากการรับรู้คำหลักของเชลล์และการทดแทนนามแฝงเกิดขึ้น
ดังนั้นในขณะที่เชลล์กำลังค้นหาคำหลักในภาษาของมันก็ไม่ได้รับการยอมรับti\me
ว่าเป็นtime
คำหลักของเชลล์ ดังนั้น:
ti\me echo test
จะรับรู้โดยเชลล์เป็นคำสั่งง่าย ๆ ซึ่งตรงข้ามกับtime
คำหลักตามด้วยคำสั่งง่ายๆ
จากนั้นการti\me
ประมวลผลการอ้างอิงจะดำเนินการ (นี่คือเครื่องหมายแบ็กสแลชคือการอ้างอิงm
อักขระที่ไม่จำเป็นต้องมีการอ้างอิงอักขระการถอดข้อความออกคุณจะได้รับtime
) และtime
คำสั่งจะค้นหาเหมือนคำสั่งอื่น ๆ (ในรายการบิวด์อิน ฟังก์ชั่นและไฟล์ที่เรียกใช้งาน$PATH
ได้ส่วนใหญ่จะอยู่/bin/time
ที่นี่)
สำหรับcd
ไม่มีcd
คำหลักในภาษาของเชลล์เพียงcd
คำสั่ง builtin (ซึ่งมีความสำคัญกว่าของคุณ/usr/bin/cd
) อย่างไรก็ตามหากคุณกำหนดนามแฝงสำหรับcd
(เช่นalias cd=pushd
) ให้เหมือนกันอีกครั้ง เนื่องจากการแทนที่สมนามเสร็จสิ้นก่อนที่จะทำการลบเครื่องหมายอัญประกาศถ้าคุณมีนามแฝงcd
และไม่ใช่อันเดียว\cd
(โปรดทราบว่ามีเชลล์จำนวนไม่มากที่อนุญาตสมนามที่มีแบ็กสแลชอยู่) จากนั้นจึงเขียนโดย:
\cd dir
คุณกำลังทำให้แน่ใจว่าcd
ชื่อแทนของคุณจะไม่ถูกแทนที่
ในระยะสั้นอ้างชื่อคำสั่งหรือส่วนหนึ่งส่วนใด ๆ ป้องกันไม่ให้มันจากการถูกมองว่าเป็นคำหลักเปลือก (คำหลักเป็นสิ่งที่ชอบwhile
, for
, if
, {
... time
เป็นคำหลักในบางหอยเท่านั้น) และทะลุนามแฝงคุณอาจจะต้องให้มัน .
มันไม่ได้ แต่บังคับคำสั่งที่จะมีมติให้แฟ้มที่ปฏิบัติการใน$PATH
คำสั่งยังคงสืบค้นแรกในฟังก์ชั่น (ซึ่งคุณสามารถหลีกเลี่ยงโดยการทำcommand time cmd...
) และbuiltins (ซึ่งคุณสามารถหลีกเลี่ยงโดยการทำenv time cmd...
แต่ผมไม่ทราบว่าของ เชลล์ที่มีtime
คำสั่งbuiltin )
โปรดทราบว่าการอ้างถึงสามารถมีอิทธิพลต่อพฤติกรรมของบิวด์อินพิเศษของตระกูลtypeset
/ declare
/ export
/ local
... ในเชลล์บางตัว ดูคำพูดจำเป็นสำหรับการกำหนดตัวแปรท้องถิ่นหรือไม่? สำหรับรายละเอียด