अगर मैं शाब्दिक संख्याओं का उपयोग करते हुए इस तरह से बैश लूप बनाता हूं, तो सभी उम्मीद के मुताबिक काम करते हैं:
#!/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
। यह भी अधिक कुशल है, क्योंकि आप लूप शुरू होने से पहले सूचकांकों की संभवतः बड़ी सूची तैयार करने की आवश्यकता नहीं रखते हैं।