শেলটিতে বুলিয়ান ভেরিয়েবলের কোনও ধারণা নেই।
শেল ভেরিয়েবল শুধুমাত্র হতে পারে text(একটি স্ট্রিং), এবং কিছু ক্ষেত্রে, যে পাঠ্য (একটি পূর্ণসংখ্যা হিসেবে ব্যাখ্যা করা যেতে পারে 1, 0xa, 010, ইত্যাদি)।
অতএব, flag=trueএটি শেলের কাছে কোনও সত্যতা বা মিথ্যাচারকে বোঝায় না।
দড়ি
যা করা যায় তা হ'ল একটি স্ট্রিং তুলনা [ "$flag" == "true" ]বা কোনও কমান্ডের ভেরিয়েবল সামগ্রী ব্যবহার করে এবং এর পরিণামগুলি যেমন: এক্সিকিউট true( যেমন একটি এক্সিকিউটেবল বলা হয় trueএবং বলা হয় উভয়ই রয়েছে false) একটি আদেশ হিসাবে পরীক্ষা করে পরীক্ষা করে দেখুন যে সেই কমান্ডের প্রস্থান কোডটি শূন্য কিনা? (সফল)।
$flag; if [ "$?" -eq 0 ]; then ... fi
বা সংক্ষিপ্ত:
if "$flag"; then ... fi
যদি কোনও ভেরিয়েবলের বিষয়বস্তু কমান্ড হিসাবে !ব্যবহার করা হয় তবে কমান্ডের প্রস্থান স্থিতিটিকে অস্বীকার করার জন্য একটি ব্যবহার করা যেতে পারে, যদি উভয় ( ! cmd) এর মধ্যে একটি স্থান বিদ্যমান থাকে তবে :
if ! "$flag"; then ... fi
স্ক্রিপ্টটি এতে পরিবর্তন করা উচিত:
flag=false
while ! "$flag"
do
read x
if [ "$x" == "true" ]
then
flag=true
fi
echo "${x} : ${flag}"
done
পূর্ণসংখ্যা
সংখ্যার মান এবং গাণিতিক বিস্তৃতি ব্যবহার করুন ।
এই ক্ষেত্রে, প্রদর্শন করে প্রস্থান কোড $((0))হল 1এবং প্রস্থান কোড $((1))হয় 0।
ব্যাশে, ksh এবং zsh এ পাটিগণিতটি একটি এর অভ্যন্তরে বাহিত হতে পারে ((..))(লক্ষ্য করুন যে শুরুর $অনুপস্থিত)।
flag=0; if ((flag)); then ... fi
এই কোডের একটি বহনযোগ্য সংস্করণ আরও সংশ্লেষিত:
flag=0; if [ "$((flag))" -eq 0 ]; then ... fi # test for a number
flag=0; if [ "$((flag))" == 0 ]; then ... fi # test for the string "0"
বাশ / কেএসএ / জেডএসে আপনি এটি করতে পারেন:
flag=0
while ((!flag))
do
read x
[ "$x" == "true" ] && flag=1
echo "${x} : ${flag}"
done
বিকল্পভাবে
আপনি "একটি বুলিয়ান ভেরিয়েবল ইনভার্ট করুন" (এটিতে একটি সংখ্যাসূচক মান থাকে তবে):
((flag=!flag))
যে হবে পরিবর্তন মান flagউভয় 0বা 1।
দ্রষ্টব্য : দয়া করে আপনার কোডটিকে প্রশ্ন হিসাবে পোস্ট করার আগে https://www.shellcheck.net/ এ ত্রুটিগুলি পরীক্ষা করে দেখুন , সমস্যাটি খুঁজে পাওয়ার জন্য এটি বহুবার যথেষ্ট।