বাশে পদক্ষেপ এন সহ একটি পরিসীমা কীভাবে উত্পাদন করবেন? (ইনক্রিমেন্ট সহ সংখ্যাগুলির ক্রম তৈরি করুন)


143

ব্যাশে কোনও ব্যাপ্তির উপরে পুনরাবৃত্তি করার উপায়টি

for i in {0..10}; do echo $i; done

একটি পদক্ষেপ সহ ক্রম উপর পুনরাবৃত্তি জন্য সিনট্যাক্স কি হবে? বলুন, আমি উপরের উদাহরণে কেবলমাত্র সংখ্যাটি পেতে চাই।


এমনকি সংখ্যাগুলি, i কে 2 দিয়ে গুন করুন: পি
জো রবার্ট

গুণটি বরং কুৎসিত, আমার বলা উচিত
সাইলেন্টগোস্ট

2
@ সর্বজনীন আমি এতটা নিশ্চিত নই উদাহরণস্বরূপ, ওএস এক্স এখনও 3.2 সহ আসে। আমি বলব সি-স্টাইলের লুপটি গ্রহণ করা উচিত।
এলি কোরভিগো 17

উত্তর:


195

আমি করতাম

for i in `seq 0 2 10`; do echo $i; done

(যদিও seq 0 2 10তার নিজস্বভাবে একই আউটপুট উত্পাদন করবে)।

নোট যা seqভাসমান-পয়েন্ট সংখ্যাগুলিতে (যেমন, seq .5 .25 3.5) অনুমতি দেয় তবে ব্যাশের ব্রেস সম্প্রসারণ কেবল পূর্ণসংখ্যার অনুমতি দেয়।


4
আমি একটি অনুমানকে ঝুঁকিতে ফেলব যে ডাউনওয়েট আপনার উত্তরটি 'শ' এর জেনেরিক হওয়ার কারণে এবং 'বাশ' এর সাথে নির্দিষ্ট নয়। খাঁটি বাশ অ্যাপ্রোচ - প্রারম্ভের শেষ ধাপ just কিছুটা ভাল সম্পাদন করে busy পুরানো 'সিক' পদ্ধতিটি ব্যস্তবক্সের মতো পুরানো বা ছোট-মেমরি সিস্টেমগুলিতে কার্যকর। আমি আপনার এবং থোনসাইয়ের উত্তর উভয়কেই উড়িয়ে দিয়েছি। :)
স্কট প্রাইভ

6
ব্যাককোটে $ (...) পছন্দ করুন। ব্যাককোটগুলি বোকা বাসা বাঁধে না।
সর্বজনীন

seq 1000000 1000010 শুধুমাত্র ভাসমান করে তোলে, আসলে - এটি পূর্ণসংখ্যার করার কোনও উপায় নেই! ব্রেস সম্প্রসারণ কাজ।
হামিজাইল

112

বাশ 4 এর ব্রেস সম্প্রসারণের একটি ধাপ বৈশিষ্ট্য রয়েছে:

for {0..10..2}; do
  ..
done

বাশ 2/3 (লুপের জন্য সি-স্টাইল, উপরের উত্তরগুলি দেখুন) বা বাশ 4 নয়, আমি 'সেক' কমান্ডের চেয়ে কিছু পছন্দ করব।


1
এবং বিটিডব্লিউ, আপনি কি জানেন যে কোনও বড় ওএসে bash4 ডিফল্ট হয় কিনা?
সাইলেন্টগোস্ট

3
বাশ 4 এখনও মূলধারার নয়, নেই। সিক না কেন? ভাল, আসুন এটি আইআরসি চ্যানেল #bash এ বটের শব্দ দিয়ে বলতে পারি: "সিক (1) হ'ল সিলি লিনাক্স হাওটোসগুলিতে 10 হিসাবে গণ্য করার জন্য ব্যবহৃত একটি অত্যন্ত নন-মানসম্পন্ন বাইরের কমান্ড" "
দ্য বনসাই

আমার বোধগম্যতা হল যে সেক হ'ল কোর্টিলের একটি অঙ্গ। এটি সম্পর্কে মানহীন কী? যুক্তি? আপনার সাহায্যের জন্য ধন্যবাদ.
সাইলেন্টগোস্ট

4
এই যুক্তিগুলি আপনার পক্ষে গণ্য হতে পারে বা নাও পারে: * জিএনইউ কোর্টিলগুলি ব্যতীত পর্যাপ্ত সিস্টেম রয়েছে (তবে ব্যাশ ইনস্টল করা হয়েছে) * আপনি একটি অনিবন্ধিত বাহ্যিক প্রক্রিয়া তৈরি করেন * আপনি এই ধারণাটির উপর নির্ভর করেন যে আপনার 'সিক' যা করে তা সব 'সিক' করে তোলে * আইএসও দ্বারা মানসম্মত নয়
থোনসনাই

3
@ বেকো যদি পদক্ষেপটি ভেরিয়েবলে সংরক্ষণ করা থাকে iতবে আপনি পারবেন না for {0..10..${i}}.. এটি ব্যর্থ।
নেহাল জে ওয়াণী

72

খালি বাশ, কোনও অতিরিক্ত প্রক্রিয়া ছাড়াই:

for (( COUNTER=0; COUNTER<=10; COUNTER+=2 )); do
    echo $COUNTER
done

10
+1 কারণ পদক্ষেপটি পরিবর্তনশীল দ্বারাও প্রতিস্থাপন করা যেতে পারে।
নেহাল জে ওয়াণী

1
আমি মনে করি এটি বেশিরভাগ লোকেরা সম্ভবত চান - নির্ধারিত পদক্ষেপের মান সহ লুপটি করার একটি সহজ উপায়। এটি সিক ভিত্তিক সমস্ত উত্তরগুলির চেয়ে সহজ শোনায় এবং এটি ব্যাশ 4 ব্রেস সম্প্রসারণের তুলনায় একটি পরিষ্কার বাক্য গঠন এবং এটি দেখতে ভেরিয়েবলের জন্য অনুমতি দেবে বলে মনে হচ্ছে (আমি এটি চেষ্টা করি নি, তবে বাক্য গঠনটি অবশ্যই এটিকে পরামর্শ দেয়)।
টোবিলারোনি

@ থোনসাইয়ের উত্তরের বিপরীতে বাশ 3 এ কাজ করে।
srcerer

এটি ভেরিয়েবলের সমাধানও করে ((i = "$ প্রথম"; i <= "$ শেষ"; i + = "$ পদক্ষেপ"))। কোঁকড়া ধনুর্বন্ধনী এবং সিক সঙ্গে এত সহজ নয়।
ব্লা_চোর

20
#!/bin/bash
for i in $(seq 1 2 10)
do
   echo "skip by 2 value $i"
done

seq একটি লিনাক্স কমান্ড। এটি ম্যাক ওএস এক্স বা ফ্রিবিএসডি-তে উপলব্ধ হবে না।
ডেরিকসন

5
FWIW seq আমার স্ট্যান্ডার্ড ওএস এক্স ম্যাভেরিক্স 10.9.1 এ উপলব্ধ
মার্ক সেটেল

আমি অন্য কয়েকটি সিনট্যাক্স চেষ্টা করেছি, তবে এটি কেবলমাত্র আমার জন্য সামান্য CentOS এ কাজ করছে। @ জে - আমার দিন বাঁচিয়েছে: ডি
এম

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