शेल में 10 से अधिक मापदंडों को कैसे संभालना है


101

मैं लाइनक्स पर बैश शेल का उपयोग कर रहा हूं और शेल स्क्रिप्ट में 10 से अधिक मापदंडों का उपयोग करना चाहता हूं


8
ध्यान दें कि 10 पैरामीटर होने से यह काफी भ्रमित हो जाएगा। शायद इसके बजाय विकल्पों (जैसे -a 1या --foo=bar) का उपयोग करना बेहतर होगा । ऐसा करने के लिए कुछ विकल्प देखें man getopt, man getoptsऔर man bash
मिकेल

जवाबों:


158

उन्हें सेट करने के लिए घुंघराले ब्रेसिज़ का उपयोग करें:

echo "${10}"

आप इस तरह से स्थितीय मापदंडों पर पुनरावृति कर सकते हैं:

for arg

या

for arg in "$@"

या

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done

2
ध्यान दें कि $ {10} काम करेगा, लेकिन आपके पोर्टेबिलिटी को सीमित कर देगा क्योंकि श के कई कार्यान्वयन केवल एकल अंक विनिर्देशों की अनुमति देते हैं।
विलियम पर्ससेल

1
@William: कुछ ऐसे गोले हैं जो इसे स्वीकार नहीं करेंगे, जैसे कि मूल विरासत बॉर्न शेल, लेकिन गोले के अलावा मैंने एक और टिप्पणी (बाश, डैश, ksh और zsh) में सूचीबद्ध किया था, यह csh, tcsh में भी काम करता है। और बिजीबॉक्स ऐश।
अगली सूचना तक रोक दिया गया।

1
@WilliamPursell ${10}को POSIX
Steven Penny

2
${10}बहुत पुराने कार्यान्वयन का उपयोग करते समय काम करने के बारे में चिंता केवल आवश्यक है जो मानक अनुपालन नहीं हैं। शायद केवल ऐतिहासिक रुचि का ... और फिर भी मुझे अभी तक इसका उपयोग नहीं करना है! मुझे लगता है क्योंकि सबसे अच्छा अभ्यास यह तय करता है कि 10 तर्क वैसे भी बहुत सारे हैं जब तक कि वे दोहराए नहीं जाते हैं, जिस स्थिति में आप उन पर ध्यान देने के "$@"बजाय उन पर पुनरावृति करेंगे ।
विलियम पर्सेल

22

आपके पास 0 से 255 तक 256 पैरामीटर हो सकते हैं:

${255}

5
मुझे लगता है कि सीमा शेल पर निर्भर है। बैश, पानी का छींटा, ksh और zsh यह नहीं लगता है। sh -c 'echo ${333}' /usr/bin/*
अगली सूचना तक रोक दिया गया।

3
मेरा शेल आराम से 2 मिलियन तक चला जाता हैset $(seq 2097152); echo ${2097152}
स्टीवन पेनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.