ทุบตีถือว่าในตัวtimeเป็นกรณีพิเศษเมื่อแยกบรรทัดคำสั่ง
ดังที่สามารถอ่านได้ใน bash manpage บรรทัดที่พิมพ์ถูกแบ่งออกเป็นรายการแรก:
pipeline ; pipeline
โดยที่ไปป์ไลน์:
[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]
หรือในกรณีของเราเพียง:
time command
เช่นถ้าเวลามีอยู่แล้วคำสั่งจะต้องเป็นปัจจุบัน
[มีกรณีพิเศษที่อนุญาตให้timeขึ้นบรรทัดใหม่ แต่ไม่สามารถใช้งานได้ที่นี่]
ดังนั้นในกรณีของเราเรามี:
time;date
ถูกแบ่งออกเป็นสองท่อ:
1. time
2. date
และไปป์ไลน์ 1 นั้นมีรูปแบบไม่ดีเนื่องจากเราtimeไม่มีคำสั่ง ดังนั้นข้อผิดพลาด
โปรดทราบว่าบรรทัดคำสั่งtimeไม่ทำงานที่นี่:
$ /usr/bin/time;date
Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose]
ทุบตีวิเคราะห์สิ่งนี้ตามที่คาดไว้ออกเป็น 2 ท่อ:
1. /usr/bin/time
2. date
และ/usr/bin/timeจากนั้นก็ปฏิเสธที่จะทำงานกับข้อโต้แย้งใด ๆ โปรดทราบว่านี่เป็นข้อผิดพลาดจาก/usr/bin/timeไม่ใช่ข้อผิดพลาดจากการทุบตี
เหตุผลที่ back-tick ใช้งานได้เนื่องจาก back-tick หยุดtimeถูกตีความว่าเป็นองค์ประกอบพิเศษภายในไปป์ไลน์
เช่นกับ back-tick:
`time`;date
มันแยกเป็นสองท่อ:
1. `time`
2. date
โปรดจำไว้ว่าในกรณีของเราคือ:
[time] command
และปัญหาแรกคือเราtimeไม่มีคำสั่งซึ่งไม่ได้รับอนุญาต แต่ตอนนี้เรามีคำสั่ง:
`time`
หากไม่มีเครื่องหมายข้างtimeหลังหมายความว่าtimeถูกตีความว่าเป็นคำสั่งไม่ใช่คำก่อนหน้า
ดังนั้นทุบตีจึงสร้างบิวอินtimeโดยไม่มี args ซึ่งเป็นที่ยอมรับ มันไม่สร้างผลลัพธ์และเราไม่เห็นข้อผิดพลาด
โปรดทราบว่า:
`time`
จริง ๆ แล้วเรียกใช้ผลลัพธ์ของtimeบิวด์อินเช่นมันรันอะไรก็ตามที่timeบิวด์อินสร้างบน stdout แต่เนื่องจากtimeตัวมันเองไม่ได้เขียนอะไรเลยเพื่อ stdout มันจึงดูเหมือนใช้งานได้
ในที่สุดมันก็ถูกตั้งข้อสังเกตว่างานนี้:
time ; ; date
ซึ่งฉันไม่สามารถอธิบายได้อย่างน่าเศร้า :)
time;datedate;timeดูเหมือนว่าจะมีปัญหากับไปป์ไลน์ในbashและอักขระตัวสุดท้ายที่สร้างขึ้นด้วยtimeเอาต์พุต ผลการทดสอบในโปรแกรมจำลองเทอร์มินัลที่แตกต่างกันคือ: - [Bash] $ date; time # [OK] $ time; date # [ NotOK ] bash: ข้อผิดพลาดทางไวยากรณ์ใกล้โทเค็นที่ไม่คาดคิด `date '$ time # ข้อผิดพลาดเท่านั้น ผลของวันที่ใด ๆ - [Csh] $ date; time # [OK] $ time; date # [OK] - [Tcsh] $ date; time # [OK] $ time; date # [OK] - [Ksh] $ date; time # [ ตกลง] $ time; date # [OK]