সেমিকোলনগুলি শেল স্ক্রিপ্টগুলির একটি লাইনের শেষে অতিমাত্রায়?


106

আমার কাছে একটি শেল স্ক্রিপ্ট রয়েছে যার মধ্যে নিম্নলিখিত রয়েছে:

case $1 in
    0 )
    echo $1 = 0;
    OUTPUT=3;;
    1 )
    echo $1 = 1;
    OUTPUT=4;;
    2 )
    echo $1 = 2;
    OUTPUT=4;;
esac

HID=$2;
BUNCH=16;
LR=.008;

হয় সেমিকোলন উপরে স্নিপেট সম্পূর্ণভাবে অপর্যাপ্ত? এবং কিছু লোক ডাবল সেমিকোলন ব্যবহার করার কোনও কারণ আছে কি?

এটি দেখা যাচ্ছে যে সেমিকোলনগুলি কেবল একটি বিভাজক, এমন কোনও কিছু যা আপনি নতুন লাইনের পরিবর্তে ব্যবহার করবেন।

উত্তর:


154

একটি রেখার শেষে একক সেমিকোলনগুলি অতিমাত্রায় ব্যবহৃত হয়, যেহেতু নতুন লাইনটিও একটি কমান্ড বিভাজক। caseপ্রতিটি প্যাটার্ন ব্লকের শেষ কমান্ডের শেষে বিশেষত ডাবল সেমিকোলনগুলির প্রয়োজন; দেখতে help caseবিস্তারিত জানার জন্য।


20
দুর্দান্ত! সুতরাং, যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি, তবে আমি কোনও লাইনের শেষে কোনও একক সেমিকোলন নিরাপদে সরিয়ে ফেলতে পারি, তবে কখনও দ্বিগুণ করব না?
নাগেল

29

মতে man bash:

  metacharacter
         A character that, when unquoted, separates words.  One of the following:
         |  & ; ( ) < > space tab
  control operator
         A token that performs a control function.  It is one of the following symbols:
         || & && ; ;; ( ) | |& <newline>

সুতরাং, ;মেটাচার্যাক্টর বা নিয়ন্ত্রণ অপারেটর হতে পারে, যখন ;;সর্বদা একটি নিয়ন্ত্রণ অপারেটর (কেস কমান্ডের ক্ষেত্রে)।

আপনার নির্দিষ্ট কোডে, ;লাইনের শেষে সমস্ত প্রয়োজন হয় না। ;;তবে প্রয়োজন হয়।


4
;এবং ;;তারপর মধ্যে ব্যবহারিক পার্থক্য কি ? BASH "মেটাচার্যাক্টর" এবং এটি "কন্ট্রোল অপারেটর" নামে পরিচিত তার মধ্যে বাস্তব পার্থক্য জানতে BASH সিনট্যাক্স পার্সিংয়ের সাথে আমি যথেষ্ট পরিচিত নই।
jvriesem

4
জাভরিসেমের প্রশ্ন ও মতামতগুলির সাথে একমত, ডক্স স্নিপেটটি কিছুটা সংকীর্ণ বলে মনে হচ্ছে
55


1

@ ওপেনসোর্সবুক-অমিত

;টার্মিনাল বা শেল স্ক্রিপ্টে একক সেমিকোলনের সমতুল্য নিউলাইনস ।

নীচের উদাহরণগুলি দেখুন:

টার্মিনালে:

[root@server test]# ls;pwd;

শেল স্ক্রিপ্টে:

[root@server test]# cat test4.sh

echo "Current UserName:"
whoami

echo -e "\nCurrent Date:";date;

[root@server test]#

তবে আমি &নিউলাইন বা একক সেমিকোলনের সমতুল্য সেই মন্তব্যে একমত নই

& ব্যাকগ্রাউন্ডে কমান্ডগুলি রান করে একটি কমান্ড বিভাজক হলেও সেমিকোলন বা নিউলাইন হিসাবে কাজ করে না।


-1

পছন্দ করুন

প্রকৃতপক্ষে এটি সম্পূর্ণ সঠিক নয়, একটি লাইনের শেষে একক অর্ধিকোলগুলি অতিরিক্ত অতিরিক্ত নয় এবং অবশ্যই নতুন লাইনের মতো একই জিনিস নয়।

থেকে ব্যাশ রেফারেন্স ম্যানুয়াল

কমান্ডগুলি একটি ''; দ্বারা পৃথক করা; ক্রমান্বয়ে মৃত্যুদন্ড কার্যকর করা হয়; শেল প্রতিটি কমান্ডের জন্য ঘুরে দাঁড়ানোর জন্য অপেক্ষা করে। রিটার্নের স্থিতি হ'ল শেষ আদেশের নির্বাহ স্থিতি।

"নতুন লাইন" দ্বারা পৃথক করা কমান্ডগুলি সমান্তরালে কার্যকর করা যেতে পারে যখন সেমিকোলন দ্বারা বিচ্ছিন্ন আদেশগুলি সর্বদা ক্রমানুসারে কার্যকর করা হয়


5
এটা মিথ্যা। এখানে কোন পার্থক্য নেই. আপনি যদি ম্যানুয়ালটির একই বিভাগটি সঠিকভাবে পড়েন, তবে আপনি উপরের কয়েকটি লাইনটি দেখতে পাবেন: A sequence of one or more newlines may appear in a list to delimit commands, equivalent to a semicolon.সুতরাং আপনি সেমিকোলনটি সম্পর্কে যা উদ্ধৃত করেছেন তা নিউলাইনগুলিতে সমানভাবে প্রযোজ্য।
আন্ডারস্কোর_১

4
আমি সম্মত হই যে এই বাক্যটি অস্পষ্ট, আমি মনে করি লেখক যা বোঝাতে চেয়েছিলেন তা হল ";" এবং "\ n" উভয়ই একাধিকবার কমান্ড পৃথক করতে ব্যবহৃত হতে পারে তবে তারা একই কাজ করছে না not আমি এই লিঙ্কটি পেয়েছি: unix.stackexchange.com/questions/53390/… আমি লিখেছিলাম এমন কিছু স্ক্রিপ্টের সাথে আমার আসলেই সমস্যা ছিল তার আগে আমি এটিও জানতাম না "" " এবং আমার একজন সহকর্মীর দ্বারা "\ n"। দুর্ভাগ্যক্রমে, এটি অনেক দিন আগে ছিল এবং আমি এখানে একটি উদাহরণ পোস্ট করার জন্য এটি কী তা মনে করতে পারি না।
আইজে

4
যদি আপনি আপনি যে পোস্টটি @IJ লিঙ্ক পড়তে হবে আপনি যে উপমা থেকে আসে দেখতে হবে &না \n। একটি মন্তব্যে বলা হয়েছে যে সে সেমিকোলনটি এড়িয়ে যেতে পারে কারণ স্পষ্টতই, &কমান্ড বিভাজক যেমন ঠিক তেমন ;এবং হয় \n
ম্যাথিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.