ทุบตีถือว่าในตัว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;date
date;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]