কমান্ড-লাইন - এর উদ্দেশ্য কী &&?
শেল ইন, আপনি যখন দেখতে পাবেন
$ command one && command two
উদ্দেশ্যটি নিম্নলিখিত কমান্ডটি কার্যকর করা হয় && হবে যা প্রথম কমান্ডটি সফল হলে কেবল । এটি পসিক্স শেলগুলির ইডিয়োমেটিক এবং এটি কেবল বাশে পাওয়া যায় না।
এটি প্রথম ব্যর্থ হলে দ্বিতীয় প্রক্রিয়া চালানো রোধ করতে মনস্থ করে।
আপনি লক্ষ্য করতে পারেন আমি "উদ্দেশ্য" শব্দটি ব্যবহার করেছি - এটি সঙ্গত কারণেই। সমস্ত প্রোগ্রামের একই আচরণ হয় না, সুতরাং এটি কাজ করার জন্য, আপনাকে বুঝতে হবে যে প্রোগ্রামটি "ব্যর্থতা" হিসাবে বিবেচনা করে এবং ডকুমেন্টেশন পড়ে এটি কীভাবে পরিচালনা করে এবং যদি প্রয়োজন হয়, উত্স কোডটিও।
আপনার শেলটি সত্যের জন্য 0, এবং মিথ্যাটির জন্য অন্যান্য ধনাত্মক সংখ্যার ফেরতের মান বিবেচনা করে
প্রোগ্রামগুলি প্রস্থান করার সিগন্যাল ফিরিয়ে দেয় । যদি তারা সফলভাবে প্রস্থান করে তবে তাদের 0 ফেরত আসা উচিত, বা না থাকলে শূন্যের চেয়ে বড়। এটি প্রক্রিয়াগুলির মধ্যে সীমিত পরিমাণে যোগাযোগের অনুমতি দেয়।
&&হিসাবে উল্লেখ করা হয় AND_IFএ posix শেল ব্যাকরণ , যা একটি অংশ and_orতালিকা কম্যান্ডের, যা অন্তর্ভুক্ত ||একটি যাOR_IF অনুরূপ শব্দার্থবিদ্যা সঙ্গে।
ডকুমেন্টেশন থেকে উদ্ধৃত ব্যাকরণ প্রতীক:
%token AND_IF OR_IF DSEMI
/* '&&' '||' ';;' */
এবং ব্যাকরণ (ডকুমেন্টেশন থেকে উদ্ধৃতও), যা দেখায় যে যে কোনও সংখ্যক AND_IF( &&) এবং / অথবা OR_IFগুলি ( ||) সংযুক্ত করা যেতে পারে (যেমন and_orপুনরাবৃত্তভাবে সংজ্ঞায়িত করা হয়):
and_or : pipeline
| and_or AND_IF linebreak pipeline
| and_or OR_IF linebreak pipeline
উভয় অপারেটরের সমান প্রাধান্য রয়েছে এবং বাম থেকে ডানে মূল্যায়ন করা হয় (তারা বাম সংঘবদ্ধ)। যেমন ডকস বলেছেন:
একটি AND-ORতালিকা এক বা একাধিক পাইপলাইনগুলি অপারেটার দ্বারা পৃথক একটি ক্রম "&&"এবং "||"।
একটি তালিকা এক বা একাধিক একটি ক্রম এবং-বা তালিকা অপারেটার দ্বারা পৃথক ';'এবং '&'এবং ঐচ্ছিকরূপে দ্বারা সমাপ্ত ';', '&'অথবা।
অপারেটরগুলির "&&"এবং "||"সমান প্রাধান্য পাবে এবং বাম সাহসিকতার সাথে মূল্যায়ন করা হবে। উদাহরণস্বরূপ, নিম্নলিখিত দুটি কমান্ডই কেবলমাত্র স্ট্যান্ডার্ড আউটপুটটিতে বার লিখবে:
$ false && echo foo || echo bar
$ true || echo foo && echo bar
প্রথম ক্ষেত্রে, মিথ্যা হ'ল একটি আদেশ যা স্থিতি সহ প্রস্থান করে 1
$ false
$ echo $?
1
যার অর্থ echo fooচলবে না (অর্থাত্ শর্টকার্কুইটিং echo foo)। তারপর কমান্ড echo barকার্যকর করা হয়।
দ্বিতীয় ক্ষেত্রে, সত্যের একটি কোড সহ প্রস্থান করে 0
$ true
$ echo $?
0
এবং তাই echo fooমৃত্যুদন্ড কার্যকর করা হয় না, তারপরে echo barমৃত্যুদন্ড কার্যকর করা হয়।
false && echo "Will not be printed"।