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


22

আসুন একটি সরল গ্রহণ করা যাক for loop

#!/bin/bash

for i in `seq 1 10`;
do
    echo $i
done

বাশ স্ক্রিপ্টগুলিতে AFAIK সেমিকোলন শেলকে বর্তমান কমান্ড সিঙ্ক্রোনিকভাবে চালিত করে এবং তারপরে পরবর্তীটিতে যান। এন্টার টিপলে আক্ষরিকভাবে একই কাজ করা বাদ দেয় যা আপনাকে নীচের কমান্ডটি প্রবেশ করতে দেয় না, সাথে সাথে বাফারটি ততক্ষণে ফ্লাশ করে।

তাহলে কেন শেল নিম্নলিখিত লাইনটি ব্যাখ্যা করতে পারে না

for i in `seq 1 10`; do; echo $i; done

এটি for loopআসলে কীভাবে কাজ করে?

উত্তর:


16

ম্যানুয়াল পৃষ্ঠা forথেকে একটি লুপ সিনট্যাক্স bashহয়

for name [ [ in [ word ... ] ] ; ] do list ; done

bashম্যানুয়াল পৃষ্ঠায় অন্য কোথাও উল্লিখিত হিসাবে সেমিকোলনগুলি গাড়িবহর রিটার্নের সাথে প্রতিস্থাপন করা যেতে পারে : "কমান্ডগুলি সীমাবদ্ধ করতে সেমিকোলনের পরিবর্তে একটি বা একাধিক নতুন লাইনের একটি তালিকা একটি তালিকায় উপস্থিত হতে পারে।"

তবে, বিপরীত সত্য নয়; আপনি যথেচ্ছভাবে সেমিকোলনগুলির সাথে নিউলাইনগুলি প্রতিস্থাপন করতে পারবেন না। আপনার মাল্টিলাইন স্ক্রিপ্টটি যতক্ষণ না আপনি উপরের সিনট্যাক্স বিধিগুলি পর্যবেক্ষণ করেন এবং কোনও অতিরিক্ত সেমিকোলন সন্নিবেশ না করেন ততক্ষণ একক লাইনে রূপান্তরিত হতে পারে do:

for i in `seq 1 10`; do echo $i; done

2
চূড়ান্ত স্ক্রিপ্টটি ভুল, @ dr01 হিসাবে উল্লেখ করা হয়েছে, আপনাকে পরে সেমিকোলনটি সরিয়ে ফেলতে হবে do
জেক

1
@ জেক, এটিও বলেছে আপনাকে অবশ্যই সেমিকোলনটি সরিয়ে ফেলতে হবে do। এছাড়াও, এই উত্তরটি আপনাকে ব্যাখ্যা করবে কেন 'do' এর পরে আপনাকে অবশ্যই সেমিকোলনটি সরিয়ে ফেলতে হবে।
ব্যবহারকারী 4556274

যদি $iকোনও ফাইলের নামের অংশ হওয়ার দরকার হয়? এটির কি ডাবল উক্তি দরকার?
বেনামে

18

সেমিকোলন পরে doত্রুটি এবং এটি হওয়া উচিত নয়।

নিম্নলিখিতটি সঠিকভাবে কাজ করে:

for i in `seq 1 10`; do echo $i; done 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.