2009-06-08 9 views
85

तरह से खत्म हो पुनरावृत्ति करने के लिए पार्टी में एक सीमाबाश में चरण एन के साथ रेंज का उत्पादन कैसे करें?

for i in {0..10}; do echo $i; done 

क्या एक कदम के साथ अनुक्रम से अधिक पुनरावृत्ति के लिए वाक्यविन्यास होगा (वेतन वृद्धि के साथ संख्या का एक अनुक्रम उत्पन्न)? कहें, मैं उपर्युक्त उदाहरण में केवल संख्या प्राप्त करना चाहता हूं।

+0

यहां तक ​​कि नंबर, मैं 2. से गुणा करें: पी –

+0

गुणा बल्कि बदसूरत है, मैं – SilentGhost

+0

बड़ा सवाल कहना चाहिए! –

उत्तर

131

मुझे क्या करना चाहते हैं

for i in `seq 0 2 10`; do echo $i; done 

(हालांकि निश्चित रूप seq 0 2 10 का अपने आप ही एक ही उत्पादन का उत्पादन होगा)।

ध्यान दें कि seq फ़्लोटिंग-पॉइंट नंबर (उदा।, seq .5 .25 3.5) की अनुमति देता है लेकिन बैश का ब्रेस विस्तार केवल पूर्णांक की अनुमति देता है।

+1

मुझे लगता है कि डाउनवोट आपके जवाब को 'sh' के लिए जेनेरिक होने के कारण था, और 'बैश' के लिए विशिष्ट नहीं था। शुद्ध बैश दृष्टिकोण {प्रारंभ अंत चरण} थोड़ा बेहतर प्रदर्शन करता है। पुरानी 'सीक' विधि व्यस्त या छोटी-स्मृति प्रणाली जैसे व्यस्त बॉक्स पर आसान है। मैंने आपके और द बोन्साई के उत्तर दोनों को ऊपर उठाया था। :) –

11
#!/bin/bash 
for i in $(seq 1 2 10) 
do 
    echo "skip by 2 value $i" 
done 
+0

seq एक लिनक्स कमांड है। यह मैक ओएस एक्स या फ्रीबीएसडी पर उपलब्ध नहीं होगा। – Dereckson

+3

एफडब्ल्यूआईडब्ल्यू सीक मेरे मानक ओएस एक्स मैवरिक्स में उपलब्ध है 10.9.1 –

+0

मैंने कुछ अन्य सिंटैक्स आज़माया है, लेकिन यह केवल मेरे लिए एक छोटे सेंटोस पर काम कर रहा है। @z - ने मेरा दिन बचा लिया है: डी – erm3nda

44

शुद्ध बैश, एक अतिरिक्त प्रक्रिया के बिना:

for ((COUNTER=0; COUNTER<=10; COUNTER+=2)); do 
    echo $COUNTER 
done 
+6

+1 क्योंकि चरण को एक चर द्वारा प्रतिस्थापित किया जा सकता है। –

70

बैश 4 की ब्रेस विस्तार एक कदम सुविधा है:

for {0..10..2}; do 
    .. 
done 

कोई फर्क नहीं पड़ता अगर बैश 2/3 (लूप के लिए सी-स्टाइल, उपरोक्त उत्तरों देखें) या बैश 4, मैं 'seq' कमांड पर कुछ भी पसंद करूंगा।

+1

क्या आप समझा सकते हैं क्यों? – SilentGhost

+0

और बीटीडब्ल्यू, क्या आप जानते हैं कि किसी भी प्रमुख ओएस पर bash4 डिफ़ॉल्ट है? – SilentGhost

+2

Bash4 अभी भी मुख्यधारा नहीं है, नहीं। क्यों नहीं? खैर, आइए आईआरसी चैनल # बश में बॉट के शब्दों के साथ कहें: "seq (1) एक बेहद गैर मानक मानक कमांड है जो मूर्खतापूर्ण लिनक्स व्हाट्स में 10 तक गिनने के लिए उपयोग किया जाता है।" – TheBonsai

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