perl - How to "serialize" and "deserialize" command line arguments to/from string? -


मैं अपनी स्क्रिप्ट कॉल करता हूं:

  $ ./script 'a! # * * * & amp; ^ $ '' Sdf sdf \ "qw sdsdf" 1 - 2 3  

यह तर्क हो जाता है:

  1: a! # * * * & Amp; ; $ 2: एसडीएफ एसडीएफ "qw sdsdf 3: 1 4: -5: 2 6: 3  

अगर मुझे स्थानीय रूप से एक ही तर्क के साथ कुछ कॉल करना पड़ता है, तो मैं ऐसा करता हूं: लेकिन मैं किसी स्ट्रिंग में सभी सरणी कैसे डाल सकता हूं (फ़ाइल में या पर्यावरण चर में स्टोर करने के लिए या टीसीपी से गुजरता है) Eaisly) और फिर इसे वापस करने के लिए आदेश पंक्ति तर्क कहीं वापस? मैं इसे सरल, लघु और सुरक्षित होना चाहता हूं।

  निर्यात CMDLINE = "$ @" # अब CMDLINE में क्या है? भाग गए या नहीं? Sh -c "someprogram $ CMDLINE" # क्या यह मेरा क्या मतलब होगा? आदर्श रूप से मैं दो प्रोग्राम चाहता हूं: पहली बार मुड़ता है एक कमांड लाइन पैरामेरेस को एक  [a-zA-Z0- 9 _] *  स्ट्रिंग में बदल देता है, और दूसरा इसे बदल देता है। कमांड-लाइन पैरामीटर के लिए मैं उपयोग कर सकता हूं। 

अपडेट: स्क्रिप्ट के जोड़े के लिखित 2 संस्करण। अधिक उपयोगी कौन सा है?

दो लिपियों का निर्माण किया गया है: एक सीरियल को एक स्ट्रिंग, अन्य इस कमांड लाइन को शुरू करते हैं (वैकल्पिक प्रीपेड आर्गुमेंट्स के साथ)।

सीरियलः:

  #! / Bin / bash n = $ #; के लिए ((i = 0; i & lt; $ n; ++ i)); अगर [-ज़ "$ 1"] करो; फिर 1 और प्रिंटफ '% s' "$ 1" को गूंज Base64 -w 0 इको फाई पारी हुई। | "[$ 1"] [/ p]  

Deserialize:

  #! / Bin / bash यदि [-z "$ 1" ]; फिर गूंज "उपयोग: डेटा को डिसेरीलाइज़ करें [वैकल्पिक आर्गुमेंट्स]" प्रतिध्वनित करें "उदाहरण: \" deserialize cXFx_d3d3_0 eee rrr \ "" गूंज \ "eee rrr qqq www \" "बाहर निकलें 1; फाई डेटा = "$ 1"; $ {DATA // _ / ''} में A के लिए shift i = 0; अगर ["$ ए" == "0"] करो; तो तोड़; फाई ["$ ए" == "1"]; तो ए = "" एफआईआर [i ++] = 'बेस 64-डी एंड एलटी; & lt; & lt; "$ ए" `एडमिन '$ @" "$ {एआरआर [@]}"  

उदाहरण:

  deserialize` serialize qqq www` गूंज  

Comments