শেলটিতে বুলিয়ান ভেরিয়েবলের কোনও ধারণা নেই।
শেল ভেরিয়েবল শুধুমাত্র হতে পারে 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/ এ ত্রুটিগুলি পরীক্ষা করে দেখুন , সমস্যাটি খুঁজে পাওয়ার জন্য এটি বহুবার যথেষ্ট।