2012-01-18 16 views
11

किसी ने मुझे इस परिणाम की व्याख्या कर सकते हैं? मैंने आदेशों को कॉल करने के लिए पावरशेल के सिंटैक्स को मास्टर करने की कोशिश कर रहे वर्षों में बहुत समय बर्बाद कर दिया है, लेकिन यह ... मैं यह अनुमान भी नहीं लगा सकता कि इनपुट से यह परिणाम कैसे प्राप्त किया जाए।PowerShell का कॉल ऑपरेटर (&) वाक्य रचना और डबल उद्धरण

PS C:\Users\P> & echoargs " ""1"" 2 3 ""4 5 6"" 7 8 9" 
Arg 0 is < 1 2 3 4> 
Arg 1 is <5> 
Arg 2 is <6 7 8 9> 

Bueller?

+0

इस echoargs आप उपयोग कर रहे है? http://weblogs.asp.net/jgalloway/archive/2006/01/27/436713.aspx – ravikanth

+0

कीथ का जवाब देखें। मैंने पिछले सप्ताह पीएससीएक्स की "सार्वजनिक बूंद" स्थापित की थी। मुझे लगता है कि तब से वह इसे अद्यतन कर चुका है। –

+0

अच्छा सवाल बीटीडब्ल्यू। पावरहेल के तर्क की अनियमितताओं को दिखाता है। लेकिन यह वास्तव में '&' के बारे में नहीं है जैसा कि आप इसे देखते हैं जब आप केवल इकोर्ग कहते हैं। – manojlds

उत्तर

4

दोगुनी-अप डबल्स एक डबल-कोटेड स्ट्रिंग के अंदर उद्धरण एक दोहरे उद्धरण डालने के लिए एक तरीका है। echoargs.exe के अद्यतन संस्करण में थोड़ा और अधिक स्पष्ट रूप से इस से पता चलता के रूप में यह आप कमांड exe आह्वान करने के लिए इस्तेमाल किया लाइन दिखाता है:

PS> echoargs " ""1"" 2 3 ""4 5 6"" 7 8 9" 
Arg 0 is < 1 2 3 4> 
Arg 1 is <5> 
Arg 2 is <6 7 8 9> 

Command line: 
"C:\...\Modules\Pscx\Apps\EchoArgs.exe" " "1" 2 3 "4 5 6" 7 8 9" 

आपको लगता है कि कमांड लाइन लेते हैं (के बाद यह PowerShell द्वारा पार्स किया गया है) आपको मिल cmd.exe में एक ही परिणाम:

CMD> EchoArgs.exe " "1" 2 3 "4 5 6" 7 8 9" 
Arg 0 is < 1 2 3 4> 
Arg 1 is <5> 
Arg 2 is <6 7 8 9> 

Command line: 
C:\...\Modules\Pscx\Apps\EchoArgs.exe " "1" 2 3 "4 5 6" 7 8 9" 

क्यों नेट या सी ++ स्टार्टअप कोड कमांड लाइन कि जिस तरह से पार्स करने के लिए के रूप में, मैं पूरी तरह यकीन नहीं है। यह MSDN topic इसे थोड़ा सा कवर करता है और यदि आप विषय के निचले भाग में उदाहरण देखते हैं, तो आप कुछ समान अजीब पार्सिंग व्यवहार देखेंगे उदा। a\\\b d"e f"g ha\\\b, de fg और h देता है।

2

ध्यान दें कि Powershell कुछ भारी कीड़े लिए जाना जाता है, जब यह आवेदन करने के लिए तर्क गुजर और कहा तर्कों के हवाले करने के लिए आता है - http://connect.microsoft.com/PowerShell/feedback/details/376207/executing-commands-which-require-quotes-and-variables-is-practically-impossible

यह मैं कैसे समझ में यह कैसे किया जा रहा है (गलत) है पार्स:

स्ट्रिंग बग डबल डबल कोट, जो शाब्दिक दोहरे उद्धरण हो जाते हैं, यह कभी नहीं बनाने के कारण " ""1"" 2 3 ""4 5 6"" 7 8 9"

है।

स्ट्रिंग "" 1 "2 3" 4 5 6 "7 8 9" क्योंकि यह मिलान उद्धरण और 4 के साथ प्रथम खंड अगले अंतरिक्ष से पहले होता है

तो <space>1 2 3 4 एक तर्क हो जाता है जैसा होगा। फिर अंतरिक्ष, और इसलिए 5 दूसरा तर्क बन जाता है। फिर अंतरिक्ष, तो अगला हिस्सा एक अलग तर्क होगा। यहां फिर से, पहला तर्क के समान नियम, सिवाय इसके कि 6 उद्धरण से पहले और बिना अंतरिक्ष के होता है और इसलिए 6 7 8 9 अगला तर्क बन जाता है।

मुनाफा - Powershell तर्क बाहरी अनुप्रयोगों के लिए गुजर सुंदर में गड़बड़ है।

+2

वी 3 जटिल तर्कों के साथ EXE को कॉल करने में सुधार करता है, इस ब्लॉग पोस्ट को देखें: http://rkeithhill.wordpress.com/2012/01/02/powershell-v3-ctp2-provides-better-argument-passing-to-exes/ –

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