2012-10-26 11 views
9

बैश शेल स्क्रिप्ट में perl कमांड कॉल में खोल चर का उपयोग कैसे करें?बैश शेल स्क्रिप्ट में perl कमांड कॉल में खोल चर का उपयोग कैसे करें?

मेरे पास दिनांक -1 का मूल्यांकन करने के लिए मेरी शेल स्क्रिप्ट में एक perl कमांड है।

मैं perl कमांड कॉल में $myDate का उपयोग कैसे कर सकता हूं?

myDate='10/10/2012' 

Dt=$(perl -e 'use POSIX;print strftime '%m/%d/%y', localtime time-86400;") 

मैं %m/%d/%y के स्थान पर $myDate उपयोग करना चाहते हैं:

यह मेरी स्क्रिप्ट में खंड है।

किसी भी मदद की सराहना की जाएगी।

धन्यवाद।

+1

की जगह ' 'जब तक आप की तरह'% एम /% d कुछ करने के लिए 'myDate' का मूल्य बदल% एम /% d /%' myDate' के मूल्य के साथ y'' किसी भी मतलब नहीं है /% y'। कृपया अपने प्रश्न को उचित रूप से ठीक करें। – ikegami

उत्तर

3

वैसे ही आप किसी भी अन्य कार्यक्रम के लिए मूल्य पास करते हैं: इसे एक तर्क के रूप में पास करें। (आप पर्ल कोड उत्पन्न करने के लिए परीक्षा हो सकता है, लेकिन यह एक बुरा विचार है।)

Dt=$(perl -MPOSIX -e'print strftime $ARGV[0], localtime time-86400;' -- "$myDate") 

ध्यान दें कि कोड हमेशा कल की तारीख वापस नहीं करता है (के बाद से नहीं सभी दिन 86400 सेकंड है)। के लिए, आप चाहते हैं

Dt=$(perl -MPOSIX -e'my @d = localtime time-86400; --$d[4]; print strftime $ARGV[0], @d;' -- "$myDate") 

या

Dt=$(perl -MDateTime -e'print DateTime->today(time_zone => "local")->subtract(days => 1)->strftime($ARGV[0]);' -- "$myDate") 

या बस

Dt=$(date --date='1 day ago' +"$myDate") 
+0

यह पोस्ट मानता है कि आप 'myDate' को प्रारूप विनिर्देशक के रूप में उपयोग करना चाहते हैं जैसा कि आपने कहा था, जिसका अर्थ है कि' myDate' में वास्तव में '% m /% d /% y' जैसा कुछ है। – ikegami

0

उसी तरह आप किसी भी अन्य कार्यक्रम के लिए मान पास: एक आर्ग के रूप में यह दर्रा। (आप पर्ल कोड उत्पन्न करने के लिए परीक्षा हो सकता है, लेकिन यह एक बुरा विचार है।) खोल से

Dt=$(perl -MPOSIX -e'my($m,$d,$y) = split qr{/}, $ARGV[0]; --$d; print strftime "%m/%d/%y", 0,0,0, $d,$m-1,$y-1900;' -- "$myDate") 
+0

यह पोस्ट मानता है कि आप वास्तव में 'myDate' का उपयोग प्रारूप विनिर्देशक के बजाय संशोधित करने की तारीख के रूप में करना चाहते हैं। – ikegami

19

चर पर्ल के %ENV हैश में उपलब्ध हैं। bash (और कुछ अन्य गोले) के साथ आपको अपने शेल वैरिएबल को "निर्यात" करने का अतिरिक्त चरण लेने की आवश्यकता है, इसलिए यह सबप्रोसेसेस के लिए दृश्यमान है।

mydate=10/10/2012 
export mydate 
perl -e 'print "my date is $ENV{mydate}\n"' 
+4

यह एक साधारण जवाब है कि नियम। उपर्युक्त एक ऐसा कुछ जटिल जटिल कोड जैसा दिखता है जिसे मैं –

+0

नहीं समझ सकता, अगर आप 'perl -p' चलाते हैं, तो यह फ़ाइल नाम के रूप में '--' को व्याख्या करता है, इसलिए केवल $ ENV का उपयोग करना संभव है ऐसी स्क्रिप्ट – sdbbs

1

क्यों कुछ नहीं की तरह: $ENV{'PATH'} = $ENV{'PATH'}.":"."/additional/path";

2

"' के बजाय का उपयोग करना भी खोल चर गुजरता संस्करण 5.24 में पर्ल के लिए।

mydate=22/6/2016 
perl -e "print $mydate" 
+0

यही कारण है कि Ikegami स्वीकार्य उत्तर में, अच्छे कारण के लिए सिफारिश करता है। यदि आपके पास 'माईडेट' पर पूरा नियंत्रण है और आप समझ रहे हैं कि आप क्या कर रहे हैं, तो इसे पर्ल कोड के रूप में इंटरपोलेट करना ठीक है ...लेकिन यह निश्चित रूप से इस मामले में सच नहीं है, और इसलिए यह स्निपेट अनियमित आउटपुट '0.00181878306878307' उत्पन्न करेगा। – tripleee

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