क्या लूप लोकल के लिए नेस्टेड के अंदर वैरिएबल बनाना संभव है


9
#!/bin/bash
for i in  1 2 3 4
do

#   {
#   local i     ##gives error  local: can only be used in a function
    for i in 1 2 3
    do
    echo "inner loop ----- $i"
    (( i++ ))
    done
#   }
echo $i
done

बाहर बाहर :

inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4

क्या लूप लोकल के लिए नेस्टेड के अंदर वैरिएबल बनाना संभव है।

जवाबों:


9

यदि आप एक उप शेल में आंतरिक चर चलाते हैं, तो यह बाहरी चर को प्रभावित नहीं करेगा:

for i in 1 2 3 4; do
    (
        for i in 1 2 3; do
            echo "inner loop ----- $i"
            (( i++ ))
        done
    )
    echo $i
done

जिसके परिणामस्वरूप:

inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
1
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
2
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
3
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4

1
यह मान्य है, लेकिन कृपया नहीं। यह एक नज़र में पढ़ने के लिए बहुत कठिन बनाता है।
coteyr

1
दुर्व्यवहार करने वाले उप-समूह बहुत अधिक स्क्रिप्ट को धीमा कर सकते हैं।
user23013

2
लेकिन केवल उन लोगों को पढ़ना मुश्किल है जो उप-गालियों का दुरुपयोग नहीं करते हैं।
user23013

9

क्या लूप लोकल के लिए नेस्टेड के अंदर वैरिएबल बनाना संभव है।

हां, लेकिन केवल एक फ़ंक्शन का उपयोग करके।

चूंकि बिलियन localकेवल एक फ़ंक्शन के अंदर मौजूद हो सकता है, इसलिए हमें वैरिएबल iको स्थानीय से क्षेत्र में परिवर्तन करने के लिए एक फ़ंक्शन प्रदान करने की आवश्यकता है :

#!/bin/bash

internalfunction () {
    local i     ### Works as is inside a function
    for i in 1 2 3; do
        echo "inner loop ----- $i"
        (( i++ ))
    done
}

for i in  1 2 3 4; do
    echo $i
    internalfunction
done

$ ./script.sh
1
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
2
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
3
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3

1
यह भी मान्य है, और पढ़ने में बहुत आसान है।
coteyr

सिर्फ देखा है कि का उपयोग कर बस {} चर वर का उपयोग कर local.declareing बनाता declareभी बनाता है यह स्थानीय
मुनीश

1
@ मुनिश नहीं, केवल { }पर्याप्त नहीं है। हाँ, घोषित एक कार्य के अंदर एक var स्थानीय बनाता है ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.