2010-12-01 12 views

उत्तर

6

वाक्य रचना $script:Foo सबसे अधिक इस मामले $Foo में, एक स्क्रिप्ट स्तरीय चर संशोधित करने के लिए प्रयोग किया जाता है। जब चर को पढ़ने के लिए उपयोग किया जाता है, आमतौर पर $Foo पर्याप्त है। उदाहरण के लिए यह लिख बजाय:

verbose-script.ps1 
$script:foo = '' 
function f { $script:foo } 

मैं इस (कम वर्बोज़ और कार्यात्मक समकक्ष) लिखते थे:

script.ps1 
$foo = '' 
function f { $foo } 

कहाँ $script:Foo महत्वपूर्ण है जब आप के भीतर से एक स्क्रिप्ट स्तरीय चर संशोधित करना चाहते हैं

PS> $f = 'hi' 
PS> & { $f; $f = 'bye';$f } 
hi 
bye 
PS> $f 
hi 

सूचना ई कि $f scriptblock बाहर नहीं बदला: एक समारोह या एक गुमनाम scriptblock जैसे जैसे एक और गुंजाइश ven हालांकि हमने इसे स्क्रिप्टब्लॉक के भीतर bye में संशोधित किया। क्या हुआ कि हमने केवल $f की एक स्थानीय प्रति संशोधित की है। जब आप script: (या global:) जैसे संशोधक को लागू नहीं करते हैं, तो PowerShell एक ही नाम के साथ एक स्थानीय चर में higer-scoped चर पर copy-on-write करेगा।

ऊपर के उदाहरण को देखते हुए यदि हम वास्तव में $f करने के लिए एक स्थायी बदलाव बनाना चाहते थे, हम तो एक आपरिवर्तक script: या global: उदा .:

PS> $f = 'hi' 
PS> & { $f; $global:f = 'bye';$f } 
hi 
bye 
PS> $f 
bye 
5

script: उपसर्ग दाहिने हाथ की ओर नाम का कारण बनता है स्क्रिप्ट दायरे में ऊपर देखा जा सकता है। अनिवार्य रूप से डेटा जो स्क्रिप्ट के लिए स्थानीय है। अन्य मान्य क्षेत्रों में वैश्विक, स्थानीय और निजी शामिल हैं।

दायरे के लिए सहायता अनुभाग में इस विषय पर कुछ विस्तार शामिल है।

help about_Scopes 
+0

तरह का प्रयोग करेंगे मुझे यकीन है कि आप निजी मतलब है। :-) –

+0

तो क्या होता है जब आप स्क्रिप्ट के साथ एक स्क्रिप्ट डॉट-स्रोत करते हैं: फ़ंक्शंस और चर पर उपसर्ग? –

+0

जब आप डॉट-स्रोत करते हैं, तो स्क्रिप्ट स्कॉप्ड आइटम स्क्रिप्ट में खींचा जाता है जो डॉट-सोर्सिंग कर रहा है। –

संबंधित मुद्दे