2010-08-16 10 views
160

मैंने पावरशेल में निम्नलिखित बहुत कुछ देखा है, लेकिन यह वास्तव में क्या करता है?

$_ 
+5

बहुत अच्छा सवाल है। मुझे अन्य अस्पष्ट टोकन – MattUebel

+2

के लिए यह अधिक जानकारी चाहिए, बेशक, एक विशेष टोकन के लिए उत्तर दिया गया है, लेकिन पावरशेल के विशेष टोकन के _all_ को चित्रित करने वाले वॉलचर्ट के लिए, [पावरशेल विराम चिह्न की पूर्ण मार्गदर्शिका] पर एक नज़र डालें (https://www.simple-talk.com/sysadmin/powershell/the-complete-guide-to-powershell-punctuation/) –

उत्तर

122

यह पाइप लाइन में वर्तमान मान के लिए चर है।

1,2,3 | %{ write-host $_ } 

उपरोक्त कोड में उदाहरण के लिए %{} ब्लॉक सरणी में प्रत्येक मान के लिए कहा जाता है। $_ चर में वर्तमान मूल्य होगा।

+31

यह आवश्यक रूप से पाइपलाइन से संबंधित नहीं है। यह वर्तमान में "वर्तमान में निष्पादित स्क्रिप्ट ब्लॉक के लिए वर्तमान तर्क" है। उदाहरण के लिए, जबकि आप इसका उपयोग 'फॉरएच-ऑब्जेक्ट' या 'कहां ऑब्जेक्ट' में ठीक कर सकते हैं, आप इसे 'गेट-फू | एड-सदस्य नोटप्रॉपर्टी बार ($ _। कुछ प्रॉपर्टी)' में इस्तेमाल नहीं कर सकते हैं - वहां एक है पाइपलाइन शामिल है, लेकिन कोई स्क्रिप्ट ब्लॉक नहीं है और इसलिए कोई '_ _' नहीं है। (ऐसा कहा जा रहा है कि पावरशेल सहायता '$ _' के लिए पाइपलाइन को भी संदर्भित करती है। भ्रमित।) – Joey

+2

@ जेरेडपायर कृपया PS3 के बाद $ PSItem $ 8 के लिए उपनाम के बारे में जानकारी जोड़ें। – ALIENQuake

+0

@ जॉय आप अपने उदाहरण में $ _ का बिल्कुल उपयोग कर सकते हैं। 'गेट-फू | ऐड-सदस्य-टाइप नोटप्रोपर्टी -नाम बार-वैल्यू $ _। कुछ प्रॉपर्टी ' – Xalorous

22

this वेबसाइट के अनुसार, यह ज्यादातर छोरों में this के लिए एक संदर्भ है,।

$ _ (डॉलर अंडरस्कोर) 'यह' टोकन। आमतौर पर फोरैच लूप के अंदर आइटम को संदर्भित करता है। कार्य: संग्रह में सभी आइटम प्रिंट करें। समाधान। ... | foreach {लिखें-होस्ट $ _}

+0

+1 के लिए महान लिंक – Micah

+13

+1 के लिए +1: 'इसके अनुसार, यह एक है इस संदर्भ में। – Neolisk

+1

'यह' '_ _' चर के लिए एक भ्रमित शब्द है। ओओपी में यह आमतौर पर कक्षा को संदर्भित करता है, एक चर नहीं। –

29

मुझे लगता है कि इस चर के बारे में सोचने का सबसे आसान तरीका सी # में लैम्ब्डा अभिव्यक्ति में इनपुट पैरामीटर की तरह है। अर्थात। $_xx => Console.WriteLine(x) सी # में अज्ञात फ़ंक्शन के समान है। इन उदाहरणों को देखें:

PowerShell:

1,2,3 | ForEach-Object {Write-Host $_} 

प्रिंटों:

1 
2 
3 

या

1,2,3 | Where-Object {$_ -gt 1} 

प्रिंटों:

2 
3 

और का उपयोग कर सी # वाक्य रचना के साथ इस तुलना LINQ:

var list = new List<int> { 1, 2, 3 }; 
list.ForEach(_ => Console.WriteLine(_)); 

प्रिंटों:

1 
2 
3 

या

list.Where(_ => _ > 1) 
    .ToList() 
    .ForEach(s => Console.WriteLine(s)); 

प्रिंटों:

2 
3 
+3

सी # में चुनें lambda में इनपुट पैरामीटर के रूप में '_' का उपयोग न करें। कभी-कभी पैरामीटर को अनदेखा करते समय '_' का उपयोग किया जाता है, इसके बजाय एक्स का उपयोग करें। http://stackoverflow.com/questions/424775/is-there-a-better-way-to-express-a-parameterless-lambda-than –

1

$ _ एक चर रहा है जोपिछले से पारित प्रत्येक वस्तु/तत्व पर पुनरावृत्त | (पाइप)।

1

$ _ स्वचालित चर $ PSItem (PowerShell V3.0; Usage information found here में पेश किया गया) के लिए एक उपनाम है जो पाइप से वर्तमान आइटम का प्रतिनिधित्व करता है।

0

$_ आमतौर पर ब्लॉक अभिव्यक्तियों के अंदर सिस्टम द्वारा बनाई गई एक चर है जिसे cmdlets द्वारा संदर्भित किया जाता है जिसका उपयोग Where-Object और ForEach-Object जैसे पाइप के साथ किया जाता है।

लेकिन इसका उपयोग अन्य प्रकार के अभिव्यक्तियों में भी किया जा सकता है, उदाहरण के लिए Select-Object अभिव्यक्ति गुणों के साथ संयुक्त। Get-ChildItem | Select-Object @{Name="Name";Expression={$_.Name}}। इस मामले में $_ आइटम को पाइप किए जाने का प्रतिनिधित्व करता है लेकिन एकाधिक अभिव्यक्तियां मौजूद हो सकती हैं।

इसे कस्टम पैरामीटर सत्यापन द्वारा भी संदर्भित किया जा सकता है, जहां किसी मान को सत्यापित करने के लिए स्क्रिप्ट ब्लॉक का उपयोग किया जाता है। इस मामले में $_ आमंत्रण से प्राप्त पैरामीटर मान का प्रतिनिधित्व करता है।

सी # और जावा के निकटतम समानता लैम्डा अभिव्यक्ति है। यदि आप बुनियादी बातों के लिए शक्तियों को तोड़ते हैं तो सब कुछ एक स्क्रिप्ट ब्लॉक है जिसमें एक स्क्रिप्ट फ़ाइल ए, फ़ंक्शन और cmdlets शामिल हैं। आप अपने खुद के पैरामीटर को परिभाषित कर सकते हैं लेकिन कुछ अवसरों में आपके लिए सिस्टम द्वारा बनाया गया है जो को संसाधित/मूल्यांकन करने के लिए इनपुट आइटम का प्रतिनिधित्व करता है। उन परिस्थितियों में स्वचालित चर $_ है।

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