2012-05-04 8 views
11
function readArgs() { 
    while getopts "i:o:p:s:l:m" OPTION; do 
     case "$OPTION" in 
      i) 
       input="$OPTARG" 
       ;; 
      o) 
       output="$OPTARG" 
       ;; 
      ... 
     esac 
    done 
} 

readArgs 

if [[ -z "$input" ]]; then 
    echo "Not set!" 
fi 

यह हमेशा मुझे Not set! दे रहा है लेकिन अगर मैं लाइनों function readArgs() {, } और readArgs बाहर टिप्पणी, यह काम करता है। क्यूं कर?फ़ंक्शन के भीतर 'गेटोप्स' क्यों काम करने में विफल रहता है?

इसके अलावा,

input="$OPTARG" 
echo "$input" 
;; 

काम नहीं करता।

उत्तर

15

getoptsreadArgs फ़ंक्शन पर तर्कों को पार्स कर रहा है, और आप उस कार्य को कोई तर्क नहीं दे रहे हैं।

readArgs "[email protected]" 
8

getoptsOPTIND चर जा रहा है 1. या तो के लिए शुरू करते हैं पर निर्भर करता है

readArgs() { OPTIND=1; ... 

या

readArgs() { local OPTIND; ... 
+0

यह केवल आवश्यक है एक से अधिक आमंत्रण हैं:

साथ प्रयास करें समारोह का –

+0

ओपी ने समारोह के कंटेनर का वर्णन नहीं किया था। मैं अपने .bashrc –

+1

में लिखने वाले कार्यों के लिए इन विधियों का उपयोग करता हूं, हालांकि इस उत्तर ने ओपीएस प्रश्न का सीधे जवाब नहीं दिया है, यह एक खोज में आया है कि क्यों गेटॉप्स फ़ंक्शन में काम नहीं करता है, और मेरे कोड को डीबग करने में बहुत उपयोगी था (मेरे .bashrc में फ़ंक्शंस के लिए भी) – paulski

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