बैश timeकमांड-लाइन्स को पार्स करते समय एक विशेष मामले के रूप में बिल्ट-इन का इलाज करता है ।
जैसा कि बैश मैनपेज में पढ़ा जा सकता है, टाइप की गई लाइन पहले एक सूची में विभाजित है:
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बैश से त्रुटि नहीं है।
बैक-टिक का काम करने का कारण यह है कि बैक-टिक स्टॉप timeपाइपलाइन के भीतर एक विशेष तत्व के रूप में व्याख्या किया जा रहा है।
यानी पीछे-टिक के साथ:
`time`;date
इसे दो पाइपलाइनों के रूप में रखा गया है:
1. `time`
2. date
याद रखें कि एक पाइपलाइन, हमारे मामले में है:
[time] command
और शुरू में समस्या यह थी कि हमारे पास timeकोई आदेश नहीं था, जिसकी अनुमति नहीं है। लेकिन अब हमारे पास केवल कमांड है:
`time`
पूर्ववर्ती के बिना time, चूंकि बैक-टिक्स का अर्थ है कि timeकमांड के रूप में व्याख्या की जाती है, पूर्ववर्ती शब्द के रूप में नहीं।
तो बैश तो timeबिना किसी आर्ग के साथ अपने बिलिन को चलाता है , जिसे स्वीकार किया जाता है। यह कोई आउटपुट नहीं पैदा करता है, और हम कोई त्रुटि नहीं देखते हैं।
ध्यान दें कि:
`time`
वास्तव में बिल्ट-इन का परिणाम चलता timeहै, यानी जो कुछ भी timeनिर्मित होता है वह स्टडआउट पर चलता है । लेकिन जब timeसे अपने दम पर कुछ भी लिखने के लिए नहीं है, यह काम करने के लिए प्रकट होता है।
अंत में, यह नोट किया गया है कि यह काम करता है:
time ; ; date
जो मैं समझा नहीं सकता, दुख की बात है :)
time;dateबनाम पर हैdate;time। ऐसा लगता है कि आउटपुट के साथ पाइपलाइन मेंbashऔर अंतिम चार के साथ एक समस्या हैtime। अलग-अलग टर्मिनल एमुलेटर में परीक्षण किए गए परिणाम हैं: - [बैश] $ तारीख; समय # [ठीक] $ समय; तारीख # [ नोटोक ] बैश: अप्रत्याशित टोकन के पास सिंटैक्स त्रुटि `तिथि '$ समय # केवल त्रुटि दिखाई नहीं देती है कि यह है किसी भी तारीख का परिणाम। - [Csh] $ date; समय # [OK] $ समय; तारीख # [OK] - [Tcsh] $ तारीख; समय # [OK] $ समय; तारीख # [OK] - [Ksh] $ date; समय # [ ठीक है] $ समय; तिथि # [ठीक]