एलियाह ने इसका जवाब देने का एक बड़ा काम किया है, लेकिन मैं " echo
बैश कार्यक्रम से अलग क्यों है " भाग के बारे में टिप्पणी करना चाहता हूं । यह गलत सवाल है।
सही सवाल यह है: यह पहली जगह में बिलियन क्यों है , जब यह पूरी तरह से ठीक बाहरी कमांड हो सकता है (और है)?
सादगी के लिए, डैश में निर्मित घरों पर एक नज़र डालें, एक खसरा 38 (बाश में 61 है, तुलना के लिए, उत्पादन से जा रहा है compgen -b
):
. continue getopts readonly type
: echo hash return ulimit
[ eval jobs set umask
alias exec kill shift unalias
bg exit local test unset
break export printf times wait
cd false pwd trap
command fg read true
इन में से कितने की जरूरत है builtins होने के लिए? [
, echo
, false
, printf
, pwd
, test
, और true
नहीं है की जरूरत है builtins होने के लिए: वे कुछ भी केवल एक builtin कर सकते हैं कि ऐसा नहीं करते हैं (प्रभावित या खोल राज्य कि बाहरी आदेशों के लिए उपलब्ध नहीं है प्राप्त)। बैश का printf
कम से कम एक बेसिन होने का लाभ उठाता है: printf -v var
आउटपुट को चर में बचाता है var
। time
bash में भी है खास: एक कीवर्ड होने से, आप bash (डैश के time
बराबर नहीं है ) में कमांड लिस्ट की मनमानी कर सकते हैं । pwd
किसी भी तरह से एक बेसिन होने की आवश्यकता नहीं है - कोई भी बाहरी कमांड वर्तमान वर्किंग डायरेक्टरी को इनहेरिट करने वाला है (और यह एक बाहरी कमांड भी है)।:
एक अपवाद है - आपको एनओपी की आवश्यकता है, और :
यह है। बाकी ऐसी क्रियाएं करते हैं जो एक बाहरी कमांड आसानी से कर सकती है।
इसलिए, इन बिल्डरों के पांचवे हिस्से को बिल्डिंग्स बनाने की आवश्यकता नहीं है। तो क्यों? मैनपेज * वास्तव में गुजर क्यों इन builtins (जोर मेरा) कर रहे हैं में बताते हैं:dash
Builtins
यह खंड उन अंतर्निहित कमांडों को सूचीबद्ध करता है जो बिलिन हैं क्योंकि वे हैं
कुछ ऑपरेशन करने की आवश्यकता है जो एक अलग से नहीं किया जा सकता है
प्रक्रिया। इनके अतिरिक्त, कई अन्य कमांड हैं जो हो सकते हैं
दक्षता के लिए बनाया जा सकता है (जैसे प्रिंटफ (1), इको (1), परीक्षण (1), आदि।
यह बहुत ज्यादा है: ये बिल्टइन हैं क्योंकि वे अक्सर, अंतःक्रियात्मक और लिपियों में उपयोग किए जाते हैं, और उनकी कार्यक्षमता काफी सरल है, जो शेल काम कर सकता है। और इसलिए यह होता है: कुछ (? सबसे) गोले काम पर ले लिया ** पर वापस जाएं। से 2.9 बीएसडी , और आप एक नहीं मिलेगा builtin।sh
echo
तो, यह पूरी तरह से संभव है कि एक न्यूनतम शेल ऐसे कमांड को कार्यान्वित करने के लिए छोड़ सकता है जैसे कि बिल्डिंस (मुझे नहीं लगता कि कोई भी वर्तमान शेल करता है, हालांकि)। GNU कोरुटिल्स परियोजना यह नहीं मानती है कि आप उन्हें एक विशेष शेल में चलाने जा रहे हैं, और POSIX को इन आदेशों की आवश्यकता है। इसलिए, कोरुटिल्स इन्हें वैसे भी प्रदान करता है, और उन लोगों को छोड़ देता है जिनका खोल के बाहर कोई अर्थ नहीं है।
* यह लगभग अल्मोक्विस्ट शेल के लिए संबंधित मैनपेज पाठ के समान है , जो कि डैश, डेबियन अल्मक्विस्ट शेल पर आधारित है।
** zsh
इस विचार को चरम पर ले जाता है: विभिन्न मॉड्यूल लोड करके आपको मिलने वाली कमांड, जैसे zmv
, ऐसी चीजें हैं जिनके बारे में आपको नहीं लगता होगा कि शेल की आवश्यकता है । उस बिंदु पर, असली सवाल यह है: आप ज़ीश के बजाय बैश का उपयोग क्यों करेंगे, जिसमें ये सभी भवन हैं?