चर और कार्य डैश में विभिन्न नामस्थानों में रहते हैं और यह POSIX द्वारा भी निर्दिष्ट किया गया है :
कार्यान्वयन कार्यों और चर के लिए अलग-अलग नाम स्थान बनाए रखेगा।
इसके अलावा, चर में डिफ़ॉल्ट रूप से वैश्विक गुंजाइश होती है। कुछ गोले (जैसे बाश, ksh और zsh) local
कीवर्ड को केवल स्थानीय क्षेत्र के साथ किसी फ़ंक्शन में चर घोषित करने के लिए प्रदान करते हैं ।
तो, हाँ, आप जो व्यवहार देख रहे हैं, वह POSIX द्वारा गारंटीकृत है।
POSIX नहीं किया गया है मानकीकृत local
, अभी तक :
एक प्रारंभिक प्रस्ताव में कार्यों का विवरण इस धारणा पर आधारित था कि कार्यों को लघु शैल लिपियों की तरह व्यवहार करना चाहिए; यह है कि, चर साझा करने के अलावा , एक निष्पादन पर्यावरण व्यवहार करना चाहिए जैसे कि वे एक नया निष्पादन वातावरण थे के सबसे तत्वों [..]
[..] एक समारोह के भीतर स्थानीय चर पर विचार किया गया और एक अन्य प्रारंभिक प्रस्ताव (विशेष अंतर्निहित द्वारा नियंत्रित local
) में शामिल किया गया, लेकिन उन्हें हटा दिया गया क्योंकि वे कार्यों के लिए विकसित किए गए सरल मॉडल के लायक नहीं हैं और क्योंकि अभी तक जोड़ने के लिए कुछ विरोध था एक और नया विशेष बिल्ट-इन ऐतिहासिक अभ्यास का हिस्सा नहीं था। कार्यान्वयन को पहचानकर्ता local
(और साथ ही typeset
कॉर्नशेल में उपयोग किया जाना चाहिए) को आरक्षित करना चाहिए , यदि इस मानक के भविष्य के संस्करण में स्थानीय चर तंत्र को अपनाया जाता है।
(जोर मेरा)
fn
फ़ंक्शन एक अलग नामस्थान में है; यदि इसे निष्पादित करने के बाद एक बार इसकी परिभाषा मिटा दी गई थी, तो हम ठीक वैसा ही व्यवहार देखेंगे। आपको यह दिखाना चाहिए कि फ़ंक्शन को अभी भी परिभाषित किया गया है, उदाहरण के लिएtype fn
बाद में।