উত্তর:
শেলের একক বর্গাকার বন্ধনীগুলির জন্য একটি প্রতিশব্দ test
(পৃথক কমান্ড বা শেল অন্তর্নির্মিত), তাই এর [ 0 ]
অর্থ একই জিনিস test 0
। test
ফাইলগুলির বৈশিষ্ট্যগুলি তুলনা করার জন্য এবং পরীক্ষা করার জন্য এটি যেমন আপনি এর ম্যানপেজে পড়তে পারেন। যখন এটিকে কোনও তুলনা, ফাইল পরীক্ষা, বা এটি করতে পারে এমন অন্যান্য অপারেশনের মতো মনে হচ্ছে এমন কোনও অভিব্যক্তি দেওয়া হয়নি, তখন যুক্তিটি উপস্থিত থাকলে এবং খালি খালি স্ট্রিংয়ের পরিবর্তে এটি পরীক্ষা করা হবে। না হয় 0
বা 1
সত্যই যথাযথ ইনপুটগুলি পরীক্ষার জন্য হয় এবং খালি খালি স্ট্রিং পরীক্ষাটি কেবল সফল হয় এবং আপনার সময় লুপ চিরকালের জন্য।
পরিবর্তে আপনি চেষ্টা করতে পারেন
while false; do
echo "hello"
done
সম্ভবত false
সঙ্গে প্রতিস্থাপন true
। অথবা আপনি যা চান তা হ'ল (( ))
:
while (( 0 )); do
echo "hello"
done
যা বেশিরভাগ ভাষার মতো আচরণ করবে, যেখানে 0 এর অর্থ ব্যর্থতা / মিথ্যা এবং 1 এর অর্থ সাফল্য / সত্য।
0
এবং 1
খালি স্ট্রিং নয়। নতুন শেল প্রোগ্রামাররা প্রায়শই if [ 1=2 ]
পরিবর্তে লিখেন if [ 1 = 2 ]
এবং বিস্মিত হন যে পূর্ববর্তীটি সর্বদা কেন সত্য। এটি সত্য কারণ এটি একটি একক যুক্তি এবং খালি স্ট্রিং নয়।
এখানে মান 0 একটি সংখ্যার ধ্রুবক হিসাবে কাজ করে না, তবে একটি অক্ষরের স্ট্রিং হিসাবে কাজ করে। এই পরীক্ষাগুলি একটি সফল সমাপ্তি স্থিতি উত্পাদনের তাদের প্রভাবের সমস্ত সমতুল্য:
[ A ]
[ "XYZ" ]
[ 0 ]
এগুলি একটি ব্যর্থ সমাপ্তির স্থিতি উত্পাদন করে:
[ ]
[ "" ]
একটি খালি নয় যুক্তি আছে, যা যৌক্তিক সত্যকে মূল্যায়ন করে। এটি আপনাকে এ জাতীয় কাজ করতে দেয়:
if [ $UNDER_NUCLEAR_ATTACK ] ; then
launch-missiles -a $DRY_RUN # $DRY_RUN set to "-n" during testing
fi
ভেরিয়েবলটি UNDER_NUCLEAR_ATTACK
সত্যটি নির্দেশ করতে কোনও নন-ফাঁকা মানকে সেট করা হয় বা অসম্পূর্ণ বা মিথ্যা নির্দেশ করতে খালি হয়।
!
যুক্তিটি বিপরীত করতে আমরা অপারেটরটিকে প্রয়োগ করতে পারি :
[ ! a ] # fails: a is nonblank so true; and not true is false.
[ ! ] # succeeds: blank is false, not blank is true.
একটি সংখ্যার শর্তটি মূল্যায়নের জন্য আপনাকে সংখ্যার পরীক্ষা অপারেটরগুলি ব্যবহার করতে হবে:
while [ $A -gt $B ] ; do ...
যদি A
এবং B
এর সাথে দশমিক পূর্ণসংখ্যার মতো দেখতে পাওয়া স্ট্রিং থাকে তবে তাদের সংখ্যার মতো তুলনা করা A
হয় B
এবং লুপটি কার্যকর হয়। সুতরাং ধরুন যে UNDER_NUCLEAR_ATTACK
এটি কোনও স্ট্রিং-টাইপ বুলিয়ান নয় যা ফাঁকা বা ননব্ল্যাঙ্ক নয়, তবে আসলে একটি সংখ্যার বুলিয়ান যা হয় 0
(মিথ্যা) বা অন্য কোনও মান (সত্য)। সেক্ষেত্রে আমরা পরীক্ষাটি এভাবে লিখব:
if [ $UNDER_NUCLEAR_ATTACK -ne 0 ] ; then ...
একটি যদি / তারপরে কমান্ডের তালিকার প্রস্থান স্থিতি 0 (যেহেতু 0 ইউনিক্স কনভেনশন দ্বারা "সাফল্য" মানে) পরীক্ষা করে, এবং যদি তা হয় তবে এক বা একাধিক কমান্ড কার্যকর করে tests
সংক্ষেপে, আপনি শূন্যের একটি পরীক্ষার ফলাফল ফিরিয়ে দিচ্ছেন।
[
কেবল একটি যুক্তি পায় ( ]
অবশ্যই বাদে ) স্থিতি শূন্যের সাথে প্রস্থান করে যদি তর্কটি খালি না হয় তবে ননজারো যদি হয়। সুতরাং, উদাহরণস্বরূপ, এর [ 1 ]
একটি প্রস্থান কোডও ফেরত দেবে 0
।
0 টি মানটিকে লুপের জন্য সত্য হিসাবে বিবেচনা করা হয় সুতরাং লুপটি সঠিক হওয়ার শর্ত এবং সুতরাং এটি অসীম লুপটি প্রদর্শন করা অবিরত। সত্যটি যদি আমরা 0 এর সাথে 1 দিয়ে প্রতিস্থাপন করি, শর্তের মধ্যে আমরা যে কোনও পূর্ণসংখ্যা লিখি এটি সত্য হয়ে যায়
[ ]
(কোনও যুক্তি ছাড়াই) এবং[ "" ]
(একক খালি যুক্তি দিয়ে) সফল হয় না ।