Powershell में "@" प्रतीक क्या करता है?


112

मैंने PowerShell में उपयोग किए गए @ प्रतीक को सरणियों को आरम्भ करने के लिए देखा है। वास्तव में @ प्रतीक क्या दर्शाता है और मैं इसके बारे में और कहां पढ़ सकता हूं?

जवाबों:


82

PowerShell वास्तव में किसी अल्पविराम से अलग की गई सूची को एक सरणी के रूप में मानेगा:

"server1","server2"

तो @ उन मामलों में वैकल्पिक है। हालांकि, साहचर्य सरणियों के लिए, @ की आवश्यकता है:

@{"Key"="Value";"Key2"="Value2"}

आधिकारिक तौर पर, @ "सरणी ऑपरेटर" है। आप इसके बारे में और अधिक पढ़ सकते हैं, जो पॉवरशेल के साथ, या "विंडोज पॉवरशेल: टीएफएम" जैसी किताब में स्थापित है, जिसे मैंने सह-लेखक बनाया है।


12
नीचे दिए गए जेफरी स्नोवर के उत्तर की जांच करना सुनिश्चित करें ... @ केवल एक सरणी पहचानकर्ता से अधिक है।
एरिक स्कोनओवर

115

PowerShell V2 में, @ भी Splat ऑपरेटर है

PS> # First use it to create a hashtable of parameters:
PS> $params = @{path = "c:\temp"; Recurse= $true}
PS> # Then use it to SPLAT the parameters - which is to say to expand a hash table 
PS> # into a set of command line parameters.
PS> dir @params
PS> # That was the equivalent of:
PS> dir -Path c:\temp -Recurse:$true

1
यह वही है जो मैं देख रहा था: इस ऑपरेटर का उपयोग एज़ुर रिसोर्स ग्रुप तैनाती लिपियों में स्पैट संदर्भ में किया जाता है।
एलेक्स मार्शल

57

हालांकि उपरोक्त प्रतिक्रियाएं अधिकांश उत्तर प्रदान करती हैं, यह उपयोगी है - यहां तक ​​कि इस सवाल के देर से - पूर्ण उत्तर देने के लिए, बुद्धि के लिए:

ऐरे सब-एक्सप्रेशन ( about_arrays देखें )

मूल्य एक सरणी होने के लिए मजबूर करता है, भले ही एक सिंगलटन या अशक्त, जैसे $a = @(ps | where name -like 'foo')

हैश इनिशलाइज़र ( about_hash_tables देखें )

कुंजी-मूल्य जोड़े के साथ हैश तालिका को आरम्भ करता है, जैसे $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Splatting (देखें about_splatting )

मान लें कि आप किसी सरणी या हैश-टेबल से मापदंडों के साथ एक cmdlet को आमंत्रित करते हैं, बजाय अधिक प्रथागत रूप से प्रगणित मापदंडों के, जैसे ऊपर दी गई हैश तालिका का उपयोग करके Copy-Item @HashArguments

यहाँ स्ट्रिंग्स ( देखें__oting_rules )

आइए आप आसानी से एम्बेडेड उद्धरणों के साथ तार बनाते हैं, आमतौर पर बहु-पंक्ति तार के लिए उपयोग किया जाता है, जैसे:

$data = @"
line one
line two
something "quoted" here
"@

क्योंकि इस प्रकार के प्रश्न ( पावरस्लाइड में 'x' संकेतन का क्या अर्थ है? ) StackOverflow पर और साथ ही कई पाठक टिप्पणियों में यहाँ आम है, मैंने एक साथ PowerShell विराम चिह्न का एक शब्दांश लगाया, जिसे सिर्फ़ Simple-GSM.com पर प्रकाशित किया गया था। सभी के बारे में पढ़ें @ साथ ही% और # और $ _ और? और PowerShell विराम चिह्न के लिए पूरी गाइड पर अधिक । लेख के लिए संलग्न यह चारदीवारी है जो आपको एक ही शीट पर सब कुछ देती है: यहां छवि विवरण दर्ज करें


बहुत अच्छी तरह से @ के सभी उपयोगों से चलते हैं। मैं यहां-वहां की तंगी की तलाश में आया था। धन्यवाद!
निक्सफो

27

आप यह @()सुनिश्चित करने के लिए कि आप क्या प्राप्त कर सकते हैं एक cmdlet (या पाइपलाइन) के आउटपुट को एक आइटम के बजाय एक सरणी में लपेट सकते हैं ।

उदाहरण के लिए, डीआईआर आमतौर पर एक सूची देता है, लेकिन विकल्पों के आधार पर, यह एक एकल वस्तु लौटा सकता है। यदि आप फ़ॉर्च-ऑब्जेक्ट के साथ परिणामों के माध्यम से पुनरावृत्ति करने की योजना बना रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आपको एक सूची वापस मिल जाए। यहां एक उदाहरण दिया गया है:

$results = @( dir c:\autoexec.bat)

एक और बात ... एक खाली सरणी (जैसे एक वैरिएबल को इनिशियलाइज़ करना) को दर्शाया जाता है @()


[सरणी] $ एक वाक्यविन्यास कुछ हद तक स्पष्ट है, नेत्रहीन, लेकिन अच्छी टिप है।
डॉन जोंस

7

स्प्लैटिंग ऑपरेटर

एक सरणी बनाने के लिए, हम एक चर बनाते हैं और सरणी असाइन करते हैं। Arrays को "@" प्रतीक द्वारा नोट किया जाता है। आइए ऊपर चर्चा लेते हैं और कई दूरस्थ कंप्यूटरों से जुड़ने के लिए एक सरणी का उपयोग करते हैं:

$strComputers = @("Server1", "Server2", "Server3")<enter>

वे arrays और hashes के लिए उपयोग किया जाता है।

PowerShell ट्यूटोरियल 7: डेटा को संकलित करें, याद करें और संशोधित करें

पावरशेल में ऐरे साहित्य

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.