बैश में, मुझे पता है कि एक for
लूप लिखना संभव है जिसमें कुछ लूप नियंत्रण चर i
पूर्णांक पर निर्दिष्ट करता है। उदाहरण के लिए, मैं एक बैश शेल स्क्रिप्ट लिख सकता हूं जो 1 और 10 के बीच पूर्णांक को प्रिंट करता है:
#!/bin/bash
for i in {1..10}
do
echo $i
done
क्या लूप नियंत्रण चर पर स्ट्रिंग करने के बजाय पुनरावृति संभव है, यदि मैं स्ट्रिंग की सूची प्रदान करता हूं? उदाहरण के लिए, मान लें कि मेरे पास एक स्ट्रिंग है fname
जो फ़ाइल नाम का प्रतिनिधित्व करता है। मैं प्रत्येक फ़ाइल नाम के लिए कमांड के एक सेट को कॉल करना चाहता हूं। उदाहरण के लिए, मैं fname
इस तरह से एक कमांड का उपयोग करने की सामग्री प्रिंट करना चाह सकता हूं :
#!/bin/bash
for fname in {"a.txt", "b.txt", "c.txt"}
do
echo $fname
done
दूसरे शब्दों में, पहली पुनरावृत्ति पर, fname
मान होना चाहिए fname="a.txt"
, जबकि दूसरी पुनरावृत्ति पर, fname
मान होना चाहिए fname="b.txt"
, और इसी तरह। दुर्भाग्य से, ऐसा लगता है कि उपरोक्त वाक्यविन्यास काफी सही नहीं है। मैं आउटपुट प्राप्त करना चाहूंगा:
a.txt
b.txt
c.txt
लेकिन जब मैं उपरोक्त कोड की कोशिश करता हूं, तो मुझे यह आउटपुट प्राप्त होता है:
{A.txt,
b.txt,
c.txt}
क्या आप मुझे सही सिंटैक्स निर्धारित करने में मदद कर सकते हैं, ताकि मैं चर के मान / सामग्री को परिवर्तित कर सकूं fname
? आपके समय के लिए शुक्रिया।
{}
और,
रों। विकल्प रिक्त स्थान को हटाने के लिए है। तो या तो "a.txt" "b.txt" "c.txt"
या {"a.txt","b.txt","c.txt"}
। लेकिन मैं {a..c}.txt
इसके बजाय पसंद करते हैं।
{}
, आपको (स्पेस-सीमांकित) सूची पर लूप के लिए कुछ भी करने की आवश्यकता नहीं है