"যখন:;" এর অর্থ কী?


27

আমি জানি একটি whileলুপ কী। তবে, আমি কেবল এটির সাথে কাজ করতে দেখেছি:

while [condition]
while ![condition]
while TRUE (infinite loop)

যেখানে বিবৃতিটি পরে whileথাকতে হবে TRUEবা হয় FALSE

নামে একটি শেল বিল্টিন কমান্ড রয়েছে :। এটি ডামি কমান্ড হিসাবে কিছু না করে বর্ণনা করা হয়েছে, তবে আমি জানি না যে এটি এখানে একই রকম রয়েছে, এমনকি এটি হতে পারে TRUEকি না FALSE। এটি কিছু অন্যরকম হতে পারে, তবে কী?


4
কমান্ডটি :সর্বদা রিটার্ন কোড 0 সহ প্রস্থান করে ছাড়া কিছুই করে না So সুতরাং, এটি একই রকম ছিল while true(ধরে নিলে আপনার সিস্টেমে trueএক্সিকিউটেবল রয়েছে)।
1024

@ জন 1024 এটির শূন্য ফিরে আসে যদি না তার যুক্তিগুলির মূল্যায়ন যদি ত্রুটির কারণ না করে, উদাহরণস্বরূপ, কেবলমাত্র পঠনযোগ্য ভেরিয়েবলের জন্য একটি মান নির্ধারণ করে।
কুসালানন্দ

3
@ কুসালানন্দ হ্যাঁ, যদি :কমান্ডটি কখনই কার্যকর না করা হয় তবে তা ফিরে আসবে না 0. যদিও আমার মতে এটি অত্যধিক পেডেন্টিক।
এইচডিভি

উত্তর:


50

বাক্য গঠনটি হ'ল:

while
  first list of commands
do
  second list of commands
done

কমান্ডগুলির প্রথম তালিকা যতক্ষণ না লুপে কমান্ডগুলির দ্বিতীয় তালিকাটি চালানো হয় (সুতরাং সেই তালিকার শেষ রান) সফল হয়।

যে কমান্ড প্রথম তালিকা ব্যবহার করতে পারেন [পরীক্ষা বিভিন্ন ধরণের কাজ করতে আদেশ করে, না আপনি ব্যবহার করতে পারেন :নাল কমান্ড কিছুই এবং আয় সাফল্য, বা অন্য কোন কমান্ড আছে।

while :; do cmd; done

রান cmdবহুবার চিরকাল যেমন :সবসময় সাফল্য ফেরৎ। এটাই চিরকালীন লুপ। আপনি ব্যবহার করতে পারে trueএটি আরো সহজপাঠ্য করতে পরিবর্তে কমান্ড প্রয়োগ করুন:

while true; do cmd; done

লোকেরা সর্বদা অন্তর্নির্মিত :যেমন :ছিল তেমন পছন্দ করত true(অনেক দিন আগে; বেশিরভাগ শেলগুলি trueআজকাল নির্মিত) ¹ ¹

আপনি দেখতে পাবেন এমন অন্যান্য রূপগুলি:

while [ 1 ];  do cmd; done

উপরে, আমরা ["1" স্ট্রিংটি খালি নয় কিনা তা পরীক্ষা করার জন্য কমান্ডটি কল করছি (তাই সর্বদা সত্যও সত্য)

while ((1)); do cmd; done

সি এর ((...))নকল করার while(1) { ...; }জন্য কর্ন / ব্যাশ / জেডএস সিনট্যাক্স ব্যবহার করা

বা আরও সংঘাতযুক্ত যেমন until false; do cmd; done, until ! true...

এগুলি কখনও কখনও যেমন এলিয়াসযুক্ত হয়:

alias forever='while :; do'

সুতরাং আপনি যেমন কিছু করতে পারেন:

forever cmd; done

খুব কম লোকই বুঝতে পারে যে শর্তটি আদেশের তালিকা । উদাহরণস্বরূপ, আপনি লোকেরা লিখতে দেখছেন:

while :; do
  cmd1
  cmd2 || break
  cmd3
done

যখন তারা লিখতে পারত:

while
  cmd1
  cmd2
do
  cmd3
done

এটি তালিকার জন্য এটি অর্থবোধ করে না কারণ আপনি প্রায়শই এমন কিছু করতে চান while cmd1 && cmd2; do...; doneযা কমান্ডের তালিকাও রয়েছে lists

যাইহোক, নোটটি [অন্য যেগুলির মতো একটি কমান্ড (যদিও এটি আধুনিক বোর্নের মতো শেলগুলি অন্তর্নির্মিত রয়েছে), এটি কেবলমাত্র if/ while/ untilশর্ত তালিকায় ব্যবহার করতে হবে না এবং শর্ত তালিকাগুলির মধ্যে নেই don't অন্য কমান্ডের চেয়ে এই কমান্ডটি বেশি ব্যবহার করা।


Also :এছাড়াও সংক্ষিপ্ত এবং আর্গুমেন্ট গ্রহণ করে (যা এটি উপেক্ষা করে)। আপনি যদি কোনও যুক্তি দিয়ে থাকেন তবে তার আচরণ trueবা falseঅনির্দিষ্ট। সুতরাং কেউ উদাহরণস্বরূপ করতে পারে:

while : you wait; do
  something
done

তবে, এর আচরণ:

until false is true; do
  something
done

নির্ধারিত (যদিও এটি বেশিরভাগ শেল / falseবাস্তবায়নে কাজ করবে )।


12

while :একটি অসীম লুপ। :শুধু কিছুই করে না (সফলভাবে)।

সুতরাং যদি আপনি চান যে আপনার শেলটি চিরতরে কিছুই না করে ঝুলতে থাকে তবে আপনি এটি লিখতে পারেন

while :
do
    :
done

অথবা ;নতুন লাইনের পরিবর্তে একক লাইনে :while :; do :; done

while :আপনি যদি কোনও বিশেষ শর্ত সংযুক্ত না করে বারবার কিছু করতে চান তবে সাধারণত ব্যবহৃত হয়। আপনি এটি ব্যবহার করতে পারেন continue, breakলুপের মধ্যে বিবৃতিগুলি এটি নিয়ন্ত্রণ করতে বা শর্তটিকে do ... whileকনস্ট্রাক্টের মতো লুপের শেষে নিয়ে যেতে পারে ।


12

যাইহোক, পরে বিবৃতিটি সত্য বা মিথ্যা হতে হবে।

না, কন্ডিশন অংশে কমান্ডটি কোনও কমান্ড (*) হতে পারে । সমস্ত শেল কমান্ডের কিছুটা রিটার্ন মান থাকে এবং whileলুপটি (পাশাপাশি ifশর্তসাপেক্ষে) শূন্যের মানকে "সত্য" হিসাবে এবং অন্য সকলকে "মিথ্যা" হিসাবে গ্রহণ করে। (* বা বেশ কয়েকটি কমান্ডের একটি তালিকা, শেষটি গণনা করা হয়েছে)

হিসাবে :, বাশের ম্যানুয়ালটি পরিষ্কারভাবে জানায় যে এর ফেরতের অবস্থা কী:

: [arguments]
যুক্তিগুলি প্রসারিত করা এবং পুনর্নির্দেশগুলি সম্পাদনের বাইরে কিছু করবেন না। ফেরতের অবস্থা শূন্য।

helpBuiltin আরও বেশি স্পষ্ট:

 $ help :
 [...]
 No effect; the command does nothing
 Exit Status:
 Always succeeds.

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