/ / लूप नंबर सिंटैक्स [डुप्लिकेट] के लिए ऊपरी सीमा के लिए बैश चर - बैश, चर, लूप के लिए

लूप संख्या वाक्यविन्यास के लिए ऊपरी सीमा के लिए बैश चर [डुप्लिकेट] - बैश, चर, लूप के लिए

अगर मैं शाब्दिक संख्याओं का उपयोग करते हुए इस तरह से बैश लूप बनाता हूं, तो सभी उम्मीद के मुताबिक काम करते हैं:

#!/bin/bash
for i in {1..10};  do
echo $i
done

आउटपुट है:

1
2
3
4
5
6
7
8
9
10

लेकिन अगर मैं एक चर में ऊपरी सीमा का उपयोग करना चाहता हूं, तो मैं इसे सही तरीके से प्राप्त नहीं कर सकता हूं। यहां मेरे चार प्रयास हैं

#!/bin/bash
n=10

for i in {1..$n};  do
echo $i
done

for i in {1.."$n"}; do
echo $i
done

for i in {1..${n}};  do
echo $i
done

for i in {1.."${n}"};  do
echo $i
done

और उत्पादन अब है:

{1..10}
{1..10}
{1..10}
{1..10}

वह नहीं जो मैं चाहता था ... :(

प्रश्न के बारे में स्पष्ट होना

मैं लूप के लिए बैश में रेंज सिंटैक्स की सीमा के रूप में एक चर का उपयोग कैसे करूं?

उत्तर:

जवाब के लिए 2 № 1

उपयोग नहीं करते हैं {...}; लूप के लिए सी-स्टाइल का उपयोग करें।

for ((i=1; i <= $n; i++)); do

पैरामीटर विस्तार से पहले ब्रेस का विस्तार होता है, इसलिए आप बिना उपयोग किए एक चर-लंबाई अनुक्रम उत्पन्न कर सकते हैं eval। यह भी अधिक कुशल है, क्योंकि आप लूप शुरू होने से पहले सूचकांकों की संभवतः बड़ी सूची तैयार करने की आवश्यकता नहीं रखते हैं।