2010-10-22 14 views
38

पर दूसरी बहस उत्तीर्ण करना यदि मैं एक शैल स्क्रिप्ट में किसी भी तर्क को पास करता हूं जो आंतरिक रूप से जावा प्रोग्राम को आमंत्रित करता है, तो मैं पहले जावा को छोड़कर जावा प्रोग्राम में दूसरा तर्क कैसे पारित कर सकता हूं?एक शेल स्क्रिप्ट से जावा

./my_script.sh ABCD ....

#my_script.sh 
... 
java MyApp b c d ... 
+0

संबंधित: http://stackoverflow.com/questions/28057815/how-to-get-second-to-last-argument-from-previous-bash-command –

उत्तर

58

सबसे पहले उपयोग shift पहला तर्क "का उपभोग करने के लिए", तो "[email protected]" गुजरती हैं, यानी, शेष तर्कों की सूची:

#my_script.sh 
... 
shift 
java MyApp "[email protected]" 
+4

विशेष पैरामीटर '@' चाहिए " हमेशा "उद्धृत किया जाए:' "$ @" ', अन्यथा' $ * 'से अलग नहीं है। साथ ही, उल्लेख किया जाना चाहिए कि 'शिफ्ट' के बाद, यदि पहले सहेजा नहीं गया है, तो पहला पैरामीटर गुम हो गया है। – enzotib

+0

@enzotib धन्यवाद, मैंने '$ @' उद्धृत किया है। – Bolo

+3

यह उद्धृत नहीं करता है कि सभी तर्कों को एक तर्क के रूप में पारित किया जाना चाहिए, अंतरिक्ष-पृथक तर्कों की एक सूची? मुझे लगता है कि, इस उत्तर की लोकप्रियता को देखते हुए, लेकिन शायद आप समझा सकते हैं। –

31

आप "शिफ्ट" के बिना भी दूसरे तर्क को आगे बढ़ा सकते हैं।

set -- 1 2 3 4 5 

echo "${@:0}" 
echo "${@:1}" 
echo "${@:2}" # here 
+7

'sh' में काम नहीं करता है, केवल' bash'। इसे सबस्ट्रिंग विस्तार कहा जाता है और '@' के लिए एक विशेष व्यवहार होता है। आमतौर पर यह वर्णों की गणना करता है, लेकिन '@' के लिए यह पैरामीटर की गणना करता है। – lesmana

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