বাশ মামলার বিবৃতি শেষে "এসাক" এর অর্থ কী? এটি প্রয়োজন?


55

আমি বাশ কেস স্টেটমেন্টের শেষে "এসাক" এর একাধিক উদাহরণ পেয়েছি তবে এর ব্যবহার সম্পর্কে আমি কোনও পরিষ্কার ডকুমেন্টেশন পাইনি। ম্যান পেজটি এটি ব্যবহার করে এবং এমনকি শব্দটির একটি সূচক রয়েছে ( https://www.gnu.org/software/bash/manual/bashref.html#index-esac ) তবে এর ব্যবহারটি সংজ্ঞায়িত করে না। কেস স্টেটমেন্ট, সেরা অনুশীলন, বা খাঁটি কৌশলটি শেষ করার প্রয়োজনীয় উপায় কি?


2
esacঠিক কোথায় হওয়া উচিত সেই পয়েন্টগুলির জন্য সূচী এন্ট্রি - এটি এমন রেখায় যা এটি সংজ্ঞায়িত করে এবং চিত্রিত করে যে এটি প্রয়োজনীয়।
হাবস

@ হাবস, আপনি সঠিক যে সূচকটি লাইনটির দিকে তার পয়েন্ট ব্যবহার করে তা নির্দেশ করে তবে এটি কোনওভাবেই এটি সংজ্ঞায়িত করে না, বিশেষত "|" এর মতো অন্যান্য চরিত্রের ব্যবহারের বর্ণনা করার সাথে তুলনা করে বা "" বা ";;" এখন যেহেতু আমি উত্তর (গুলি) পড়েছি, পিছনের দিকের বানান "কেস" মনে হচ্ছে এটি শেষ করার আদেশের জন্য এমন একটি ডি-ফ্যাক্টোর স্ট্যান্ডার্ড যা বেশিরভাগ অভিজ্ঞ ব্যবহারকারীরাই তা মঞ্জুর করে নিবে।
গ্রেনম্যাটনবুক্কি

যদি আপনার না থাকে esacবা এর মতো কিছু না থাকে তবে আপনি কীভাবে মনে করেন যে এটি caseবিবৃতিটির শেষ কোথায় তা বলতে সক্ষম হবে ?
বারমার

এটা সিনট্যাক্স অংশ যেমন সংজ্ঞায়িত caseবিবৃতি একই ভাবে যে else, elifএবং fiএকটি বাক্য গঠন প্রণালী অংশ হিসেবে সংজ্ঞায়িত করা হয় ifবিবৃতি। এটির নিজস্ব কোনও শব্দার্থবিজ্ঞান নেই, সুতরাং এটি সম্পর্কে কিছু বলার নেই, তবে এটি একটি caseবিবৃতি সংজ্ঞাের শেষে রয়েছে , তাই এখানেই একটি caseবিবৃতি শেষ হয়। এটি caseপিছনের দিকে বানান করা একটি সুবিধাজনক কৌতূহল, তবে কম্পিউটারের কোনও যত্ন নেই, এটি কেবল জানে যে এটি একটি নির্দিষ্ট শব্দ খুঁজছে।
hobbs

1
@ হোবস "... এ সম্পর্কে কিছু বলার নেই ..." তবুও আপনি কেন এ সম্পর্কে কিছু বলার নেই তা ব্যাখ্যা করার জন্য একটি অনুচ্ছেদ লিখেছিলেন। গুরুত্বপূর্ণ বিষয়টি হ'ল "এসাক" এর উদ্দেশ্যটি বোঝা। এ কারণেই এই প্রশ্নের সুষ্ঠু সংখ্যক উপাখ্যানের উত্তর রয়েছে।
অ্যাঞ্জেলো

উত্তর:


99

ভালো লেগেছে fiজন্য ifএবং doneজন্য for, esacপ্রয়োজনীয় উপায় শেষ হয় caseবিবৃতি।

esacহয় caseঅনগ্রসর বানান, বরং ভালো fiহয় ifঅনগ্রসর বানান। টোকেনটি কোনও forব্লকের সমাপ্তি কেন নয় তা আমি জানি না rof


33
আপনি বোঝাতে চাইছেন যে ব্লকটি odশেষ করা কেন নয় do? :)
ওয়াইল্ডকার্ড

4
\odআপনি যে ইউটিলিটিটি ব্যবহার করতে চেয়েছিলেন প্রতিবার টাইপ করতে হবে তা কল্পনা করুন ! যা বিরল, তবে আমার বক্তব্য দাঁড়ায়;)
স্কোর_উন্ডার

2
আপনাকে 666-এ টেনে নামিয়েছে You're আপনাকে স্বাগতম: পি। এবং দুর্দান্ত উত্তর!
দ্য ওয়ান্ডারার

12
@ উইল্ডকার্ড এটি fiএবং না neht, সুতরাং সাদৃশ্য অনুসারে এটি rof(বা elihw) হবে না এবং odএটিও (অবশ্যই, odইতিমধ্যে নেওয়া হয়েছে) ... তবে সম্ভবত এটি সবচেয়ে স্ব-অসামঞ্জস্যপূর্ণ ভাষার একটির মধ্যে খুব বেশি স্ব-সামঞ্জস্যের প্রত্যাশা করছে এখানে.
zwol


55

esacশব্দ প্রকৃতপক্ষে একটি প্রয়োজনীয় DELIMITER একটি শেষ হয় caseএ বিবৃতি bashএবং সবচেয়ে শাঁস ব্যতীত ইউনিক্স / লিনাক্স ব্যবহার cshপরিবার।

আসল বোর্ন শেলটি স্টিভ বোর্ন তৈরি করেছিলেন যিনি এর আগে ALGOL68 এ কাজ করেছিলেন । এই ভাষাটি এই বিপরীত শব্দ কৌশলটি ব্লকগুলি সীমান্তে আবিষ্কার করেছিল।

case/esac

if/fi

do/od

আধুনিক আর নেই do/odকিন্তু do/doneবোর্ন এবং সহ সব উদ্ভূত শাঁস bashকারণ odইতিমধ্যে এর শুরু (যেহেতু একটি ইউনিক্স কমান্ড হিসেবে বিদ্যমান ছিল ctal UMP )।

নোট করুন যে do/doneকার্যকরী ব্লকগুলি উভয় for, the while, বা untilনির্দেশাবলী দ্বারা প্রবর্তিত হয়েছে । for, whileএবং পর্যাপ্ত untilহিসাবে শেষ করার দরকার doneনেই। এই কারণেই অনুমান rofএবং elihwটোকেনের প্রয়োজন নেই ।


6

" esac" case" কোড-ব্লক " গঠনের জন্য " " পূর্ববর্তী " " কে সমাপ্ত করে ।

অ্যালগল they68 এ এগুলি ব্যবহার করা হয়, সাধারণত পরিচয় কীওয়ার্ডের বিপরীত চরিত্রের ক্রমটি ঘেরটি বন্ধ করার জন্য ব্যবহৃত হয়, যেমন ( if ~ then ~ else ~ fi, case ~ in ~ out ~ esac, for ~ while ~ do ~ od ).

এডজার ডিজকস্ট্রা এবং তার রক্ষিত কমান্ড ল্যাঙ্গুয়েজের পরে আমি তাদের "রক্ষিত ব্লক" বলব ।

odসম্ভবত ইউনিক্স "ওড" কমান্ডের প্রাক-অস্তিত্বের কারণে বোর্ন শেলটিতে ব্যবহৃত হয়নি ।

ইতিহাস:

"রক্ষিত ব্লক" ধারণাটি ALGOL থেকে এসেছে বলে মনে হয় 68 উদাহরণস্বরূপ ইংরেজি:

proc days in month = (int year, month)int:

  case month in
    31,
    if year mod 4=0  year mod 1000    year mod 400=0 then 29 else 28 fi,
    31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  esac;

সোভিয়েতের অ্যালগল LG৮ এলজিইউ বাস্তবায়নও একই কাজ করেছে: ইংরাজীতে আলগোল 68৮ এর শ্রদ্ধেয় কেস স্টেটমেন্টটি পড়ে case ~ in ~ out ~ esac, সিরিলিকে এটি পড়ে выб ~ в ~ либо ~ быв

তারপরে 1975 সালে অ্যালগল 68 এর কোড-ব্লকগুলি এডজার ডিজকস্ট্রা তার রক্ষিত কমান্ড ভাষার জন্য ধার করেছিল । যেমন

if a  b  max := a
| b  a  max := b
fi

সম্ভবত ডিজজ্রা অ্যালগল 60 এ প্রয়োগ করা ড্যাংলিং অন্য অস্পষ্টতাকে কাটিয়ে উঠতে এবং তারপরে সি প্রোগ্রামিং ভাষায় পুনরায় ইঞ্জিনিয়ার করাতে "গার্ডেড ব্লকস" ব্যবহার করেছিল । (সিএফ। শিফ্ট-হ্রাস বিরোধ। )

অবশেষে - অ্যালগল 68 থেকে - " esac1977 বোয়েন শেল (যেখানে আপনি আবিষ্কার করেছেন esac) স্টিফেন আর বোর্নের সৌজন্যে পরিণত করেছেন যিনি ALGOL 68C নামে একটি প্রাথমিক আলগোল 68 সংকলক তৈরি করেছিলেন ।

বিখ্যাতভাবে স্টিফেন এই একই রক্ষিত ব্লকগুলিকে ম্যাক্রো.কম নামে একটি "সি হেডার ফাইল" ব্যবহার করেছিলেন

#define IF  if(
#define THEN    ){
#define ELSE    } else {
#define ELIF    } else if (
#define FI  ;}

উল্লেখযোগ্য সফটওয়্যার প্রতিভা ল্যান্ডন কার্ট নোল এবং ল্যারি বাসেল ১৯৮৪ সালে স্টিভের ম্যাক্রো এইচ কোডে হোঁচট খেয়েছিল যখন সেমিকাল্টাক্টরের জিনিক্স পোর্টিং গ্রুপে কর্মরত ছিল এবং এর প্রয়োগটি বোঝার জন্য সংগ্রাম করেছিল। এবং তাই ল্যান্ডন এবং ল্যারি তারপরে আন্তর্জাতিক অবিচ্ছিন্ন সি কোড প্রতিযোগিতা তৈরি করেছিল ...

১৯৮৪ সাল থেকে আজ অবধি বেশ কয়েক হাজার অন্যান্য "আরও ভাল" প্রোগ্রামিং ল্যাঙ্গুয়েজ রয়েছে যা ডিজকস্ট্রার রক্ষিত কমান্ড ব্যবহার করে না। স্টিভেন বোর্নের এগুলির ব্যবহার macro.hএখন তথ্যপ্রযুক্তি স্নাতকদের "সফটওয়্যার ডেভলপমেন্ট গবেষণাগুলি" তে প্রায়শই প্রমাণিত হয় যে তারা বক্তৃতায় ঘুমোচ্ছিল না। :-)


কি case out? সেই সিনট্যাক্সটি কখনও দেখেনি
দানি_ল

1
@ দানি_এল এটি আলগল 68 সিনট্যাক্স বোর্ন শেল দ্বারা গৃহীত নয়।
jlliagre

odইতিমধ্যে এটি নেওয়া না হলেও তারা কেন এটিকে ডাকবে ? এটা হবে না rofবা elihw?
flarn2006

বাছাই do ~ od, if ~ fiএবং case ~ esacসহজভাবে এর অর্থ হ'ল আন্ডারগ্র্যাডগুলির অন্তহীন ভবিষ্যতের প্রজন্মগুলি আলগোল 68৮ এর চিন্তাভাবনা করতে এবং আলগল 68৮ কোডের একটি পৃষ্ঠা (লাইন?) লিখতে না পেরে তাদের চূড়ান্ত বছরের প্রকল্পে একটি সহজ "সমালোচনা" যুক্ত করতে সক্ষম হবে।
নেভিলিডিএনজেড

1

হ্যাঁ, এটি প্রয়োজন। জ্যাকব যেমন উপরে উল্লেখ করেছেন, এর যুক্তিটি if/ / এর সমান fi। Ditionতিহ্যগত সি মন্তব্য ডিলিমিটার /*এবং */একইভাবে জুড়ি। যেহেতু সি লেখা হয়েছিল যাতে ইউনিক্স বেশিরভাগ সিতে লেখা যেতে পারে, ন্যূনতম সমাবেশ কোড সহ সি এবং ইউনিক্স উন্নয়ন দলগুলির মধ্যে একটি বৃহত ওভারল্যাপ সহ, এটি বহুগুণের সমাপ্তির সমতুল্য যে ধারণার একটি সাধারণ উত্স ধরে নেওয়া যুক্তিযুক্ত -চ্যারাকটর ব্লক ডিলিমিটারটি বিপরীত ক্রমে অক্ষরের একই ক্রম হওয়া উচিত।

বিপরীতে, লুপগুলি পছন্দ করে for, whileএবং untilব্যবহার করে do... doneপরিবর্তে চরিত্রের ক্রম পরিবর্তনের জন্য, তাই কিছুটা অসঙ্গতি রয়েছে।


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