2011-04-17 9 views
45

यह संभवतः एक लंगड़ा प्रश्न है। लेकिन मुझे कमांड लाइन [बैश स्क्रिप्ट] से 3 तर्क मिल रहे हैं। तो मैं इन्हें लूप में इस्तेमाल करने की कोशिश कर रहा हूं।लूप प्रिंट्स ब्रैकेट्स के लिए बैश में कमांड लाइन तर्क सीमा का उपयोग करके तर्क

for i in {$1..$2} 
    do action1 
done 

यह हालांकि काम करने के लिए प्रतीत नहीं होता और अगर $1 है "0" और $22 यह {0..2}' and calls प्रिंट केवल एक बार action1` है। मैंने विभिन्न उदाहरणों को संदर्भित किया और यह सही उपयोग प्रतीत होता है। क्या कोई मुझे बता सकता है कि यहां क्या तय किया जाना चाहिए?

अग्रिम धन्यवाद।

उत्तर

50

कैसे के बारे में:

for i in $(eval echo {$1..$2}); do echo $i; done 
14

$ @ चर का उपयोग करें?

for i in [email protected] 
do 
    echo $i 
done 

तुम सिर्फ 1 और 2 तर्क का उपयोग करना चाहते हैं, तो बस

for i in $1 $2 

यदि आपका $ 1 और $ 2 पूर्णांक हैं और आप एक श्रृंखला बनाने के पाश वाक्य रचना के लिए सी (बैश) का उपयोग करना चाहते

for ((i=$1;i<=$2;i++)) 
do 
... 
done 
+2

आप केवल उत्तर का दूसरा भाग शामिल करना चाहते हैं - यह 'eval' का उपयोग करने से बेहतर है और सवाल फिट बैठता है। – l0b0

65

फिर आप पाश ${@:3} या ${@:3:8} और का उपयोग कर इनपुट काट कर सकते हैं पर

उदाहरण के लिए।, तर्क 3

for i in ${@:3} ; do echo $i; done 

या से शुरू मुद्रित करने के लिए के माध्यम से 8 तर्क 3 (ताकि से शुरू, तर्क 3 मुद्रित करने के लिए 10)

for i in ${@:3:8} ; do echo $i; done 
6

मुझे एक ही समस्या थी। मुझे लगता है कि यह मुद्दा ब्रेसेस '{}' के भीतर $ 1 को संदर्भित करने के साथ है। निम्नलिखित विकल्प मेरे लिए काम किया ..

#!/bin/bash 
for ((i=$1;i<=$2;i++)) 
do 
    ... 
done 

आशा है कि मदद करता है।

+0

+1 आईएमओ स्वीकार्य उत्तर में 'eval' होने के बजाय यह क्लीनर है, लेकिन स्वीकृत उत्तर ओपी के लिए अधिक विशिष्ट है – nhed

0
#/bin/bash 
for i 
do 
    echo Value: $i 
done 

यह स्क्रिप्ट फ़ाइल को दिए गए सभी तर्कों पर लूप होगा। नोट, लूप वैरिएबल के बाद कोई "नहीं" या कुछ और नहीं।

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