या कभी यूनिक्स का एक संस्करण था जहां शेल बिल्टिन "इफ" अगर एक कमांड (जैसे /bin/[और /bin/test) था?
या कभी यूनिक्स का एक संस्करण था जहां शेल बिल्टिन "इफ" अगर एक कमांड (जैसे /bin/[और /bin/test) था?
जवाबों:
लगभग नामुमकिन। ifएक आदेश नहीं है ; यह का हिस्सा है श खोल वाक्य रचना, साथ अलग पार्स नियम आदेश आदेश सूची, नेस्टेड अनुमति देने के लिए ifकी, और इतने पर।
उदाहरण के लिए, यदि ifकमांड एक आदेश है, तो निम्नलिखित स्पष्ट रूप से असंभव होगा , क्योंकि पार्सर if test -e file;बाकी को ध्यान में रखे बिना रुक जाएगा ।
if test -e file; then
echo "File exists"
else
if touch file; then
echo "File created"
else
echo "File couldn't be created"
fi
fi
या यह:
if case $path in
~/trash/*) false;;
~/*) true;;
/proc/*) false;;
*) true;;
esac; then
backup "$path"
else
echo "skipping $path"
fi
जब तक आप ऐसी चीजों का सहारा नहीं लेना चाहते थे ... बहुत सारे उद्धरण। और इसे या तो समान शेल पार्सर को फिर से लागू करना होगा if। यदि आपके पास बस एक नया स्पॉन था imaginarysh -c <argument>, तो कमांड सूचियों के अंदर चर को संशोधित करना असंभव होगा।
/bin/if "test -e file" "echo \"File exists\"" "if \"touch file\" \"echo File created\" \"echo \\\"File couldn\\\'t be created\\\"\""
(असाइड: ifवास्तव में Tcl प्रोग्रामिंग लैंग्वेज में एक कमांड है , और यह { }कोड के ब्लॉक को उद्धृत करने के लिए संतुलित के अलावा ऊपर दिए गए उदाहरण की तरह काम करता है ।)
लेकिन दूसरे सोचा पर, अगर ifकोई आदेश थे, यह असंभव चर को संशोधित करने बन जाएगा आदेश सूचियों के अंदर वैसे भी । ifतर्कों के अंदर कुछ भी संशोधित करना मुख्य प्रक्रिया तक पहुंचना असंभव होगा।
अंत में, बाहरी रूप से लागू करने का कोई फायदा नहीं हैif । गोले में, स्थिति का परीक्षण करने में 1) कमांड चलता है, और 2) इसके निकास कोड की जांच करता है। यदि ifबाहरी थे, तो आपके शेल को वैसे ही करना होगा, अन्यथा यह पता नहीं होगा कि ifसफल या असफल। (उसी कार्यक्षमता का उपयोग ||और &&सशर्त में भी किया जाता है।)
(असाइड: शुरुआती यूनिक्स प्रोटोटाइप में, chdirएक बाहरी कमांड था ।)