ব্যাশে সংজ্ঞায়িত অ্যারের দৈর্ঘ্য কীভাবে গণনা করব?


57

আমি মারতে নতুন এবং আমার প্রশ্নের উত্তর দেওয়ার জন্য একটি ভাল টিউটোরিয়াল খুঁজে পাচ্ছি না।

array=( item1 item2 item3)
for name in ${array[@]}; do
    echo current/total
    ... some other codes
done

আমি এই সত্তার প্রত্যাশিত আউটপুট হিসাবে "বর্তমান" এবং "মোট" মান গণনা করতে চাই:

1/3
2/3
3/3

যেকোন ধরণের পরামর্শের জন্য ধন্যবাদ


নোট করুন যে আপনি ${array[@]}ডাবল উদ্ধৃতি করা উচিত । অন্যথায়, শব্দ বিভাজন সম্পাদন করা হবে এবং আপনি পছন্দ মতো ইনপুটগুলিতে অনাকাঙ্ক্ষিত ফলাফল পাবেন array=("item 1" "item 2" "item 3")
বাগানের মাথা

উত্তর:


101

আপনি অ্যারে সূচকগুলি ব্যবহার করে ${!array[@]}এবং অ্যারের দৈর্ঘ্য ব্যবহার করে অ্যাক্সেস করতে পারেন ${#array[@]}, যেমন:

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $index/${#array[@]}
done

নোট করুন যেহেতু বাশ অ্যারেগুলি শূন্য সূচকযুক্ত , আপনি আসলে পাবেন:

0/3
1/3
2/3

আপনি COUNT 1 থেকে চালাতে চান, তাহলে আপনি প্রতিস্থাপন করতে পারেন $indexদ্বারা $((index+1))। আপনি যদি চান মান সেইসাথে সূচকের আপনি ব্যবহার করতে পারেন "${array[index]}"অর্থাত

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $((index+1))/${#array[@]} = "${array[index]}"
done

দান

1/3 = item1
2/3 = item2
3/3 = item3

আমি 1,2,3 পেতে চান, আমি এই কাজ করতে পারেন: echo ($index+1)/${#array[@]}?
এজিমেপ্লেয়ার

বিটিডব্লিউ, মনে হচ্ছে যে এইভাবে আমি লুপে আইটেম 1, আইটেম 2, আইটেম 3 পাব না। আইটেম 1, আইটেম 2, আইটেম 3 স্টাফ নিয়ে কাজ করার জন্য আমার কাছে এখনও অন্য কোড রয়েছে। ধন্যবাদ,
AGamePlayer

সম্পাদিত পোস্ট দেখুন।
স্টিল্ড্রাইভার

1

শূন্য সূচকটি পুরোপুরি বৈধ যদি আপনি সূচকটিকে আসলে একটি অ্যারের বেস ঠিকানা থেকে অফসেট বলে মনে করেন । এটি আসলে আদর্শ, যদিও এটি উপভাষা থেকে উপভাষায় পরিবর্তিত হয়। পুরানো জোভিয়াল ভাষার সাথে [0]প্রকৃতপক্ষে অ্যারের সর্বাধিক আকার রয়েছে। সুতরাং এটি দিয়ে শুরু [1]

কিছু বেসিক বাস্তবায়ন সহ, আপনি ইচ্ছামতভাবে হয় হয় 0বা 1প্রথম সূচক হিসাবে নির্বাচন করতে পারেন । এবং কমপক্ষে একটি বেসিক আপনি থেকে আসছে সূচক অ্যারে মনোনীত করতে পারবেন [n]করার [m]। যেখানে nএবং এর mকোনও পূর্ণসংখ্যা মান, এমনকি নেতিবাচক, যতক্ষণ না এর nচেয়ে কম বা সমান হতে পারে m। মানটি প্রবেশকারীর nথেকে বিয়োগফল হয়ে যায় [index], যেমন index-n = 0সূচকের সাথে সম্পর্কিত n

তবে আপনি নিজের কোডে একই জিনিস এবং আরও কিছু করতে পারেন। এমনকি আপনি এইভাবে কোনও অ্যারের ক্রমটিও বিপরীত করতে পারেন:

dim array(0, abs(m-n)); 
step=sign(m-n); 
if n > m then 
    base=m 
else 
    base=n; 
fi

এই কোড উদাহরণটি কেবলমাত্র একটি ভাষার আংশিক। আমি কেবল এটি আরও পাঠযোগ্য হতে চেয়েছিলাম। ধাপ পরিবর্তনশীল আপনি যে ধাপে ধাপে ধনাত্মক বা নেতিবাচক তা নিয়ে চলেছেন তা নিয়ন্ত্রণ করতে ব্যবহৃত হয় এবং অ্যারে থেকে বের হয়ে বা বেরিয়ে আসার সময় কার্যকর সূচক গণনা করতে ব্যবহৃত হয়, যা আসলে সবসময়ই ইতিবাচক থাকে [0]

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.