मैं गेटोप्स का उपयोग करके पार्स की गई वस्तुओं को बाहर निकालने के बाद शेष आर्ग्स कैसे प्राप्त कर सकता हूं?


14

मैं गेटअप का उपयोग करके एक बैश स्क्रिप्ट के लिए कुछ तर्क पार्स करना चाहता हूं, लेकिन विकल्प सूची में शामिल नहीं किए गए शेष आर्गन्स तक पहुंचने में सक्षम होना चाहता हूं। उदाहरण के लिए, यदि मेरे पास कोई कॉल है:

% script -a -b param -c param -d other arguments here

मैंने यह किया होता:

while getopts "ab:c:d" opt ; do
.
done

"यहां अन्य तर्क" प्राप्त करने का सबसे आसान तरीका क्या है, जो गेटटॉप्स द्वारा असंसाधित होना चाहिए?

जवाबों:


17

जब आप एक arg पार्स करते हैं, या डालते हैं, तो आपको शिफ्ट करने की आवश्यकता होती है

पाली $ ((ऑप्टिन -1)) को पार्स करने के बाद, फिर सामान्य तरीके से निपटें

while getopts "ab:c:d" opt ; do
.
done
shift $(expr $OPTIND - 1 )

while test $# -gt 0; do
  echo $1
  shift
done

1
यह समझाने योग्य है, कि $ OPTIND अगले विकल्प का सूचकांक माना जाता है, प्रत्येक गेटअप के चलने के बाद। इसलिए $ * में 3 पैरामीटर होते हैं, पहली वैध कॉल 2 के बाद होती है, और दूसरी यह 3 होती है। एक कॉल को अमान्य होना चाहिए, यह पहले वाले मूल्य से बाहर हो जाएगा। इसलिए यदि पैरामीटर 1 मान्य नहीं है, तो OPTIND 1 होगा (इसलिए उपरोक्त उदाहरण shift $(expr 1 - 1)सुरक्षित होगा।
sibaz

0

पार्सिंग के अंत में, जब आप चर $ @ स्थानांतरित कर लेते हैं, तो पंक्ति का अंत होता है:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.