স্থানীয় লুপের জন্য নেস্টেডের ভিতরে ভেরিয়েবলটি তৈরি করা কি সম্ভব?


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
এটি বৈধ, তবে দয়া করে করবেন না। এটি এক নজরে পড়তে আরও শক্ত করে তোলে।
কোটায়ার

1
সাবস্কেলগুলি খুব বেশি আপত্তিজনকভাবে স্ক্রিপ্টটি উল্লেখযোগ্যভাবে ধীর করতে পারে।
ব্যবহারকারী23013

2
তবে কেবলমাত্র সেই লোকদের কাছে পড়া খুব কঠিন, যারা সাবশেলের অপব্যবহার করেন না।
ব্যবহারকারী23013

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
বৈধ, এবং পড়া অনেক সহজ।
কোটায়ার

শুধু লক্ষ্য করেছি যে ব্যবহার করে শুধু {} ভেরিয়েবল Var ব্যবহার local.declareing তোলে declareএছাড়াও তোলে স্থানীয়
munish

1
@ মুনিশ না, কেবল { }যথেষ্ট নয়। হ্যাঁ, ডিক্লেয়ার একটি ফাংশনের অভ্যন্তরে একটি স্থানীয় স্থানীয় করে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.