একটি পরিষ্কার উত্তর ইতিমধ্যে @ চারলেস ডুফি এবং অন্যরা দিয়েছেন। একটি খাঁটি বাশ সমাধান নিম্নলিখিত ব্যবহার করা হবে:
string="-12,345"
if [[ "$string" =~ ^-?[0-9]+[.,]?[0-9]*$ ]]
then
echo $string is a number
else
echo $string is not a number
fi
যদিও আসল সংখ্যার জন্য মূল সংখ্যাটির আগে একটি সংখ্যা থাকা বাধ্যতামূলক নয় ।
ভাসমান সংখ্যা এবং বৈজ্ঞানিক স্বরলিপি (সি / ফোর্টরানের অনেক প্রোগ্রাম বা অন্যভাবে এভাবে ভাসমানটি রফতানি করবে) এর আরও পুঙ্খানুপুঙ্খ সমর্থন সরবরাহ করতে, এই লাইনের একটি দরকারী সংযোজন নিম্নলিখিত হবে:
string="1.2345E-67"
if [[ "$string" =~ ^-?[0-9]*[.,]?[0-9]*[eE]?-?[0-9]+$ ]]
then
echo $string is a number
else
echo $string is not a number
fi
সুতরাং আপনি যদি কোনও নির্দিষ্ট প্রকারের সন্ধান করে থাকেন তবে বিভিন্ন ধরণের সংখ্যার পার্থক্য দেখানোর উপায় নিয়ে আসে:
string="-12,345"
if [[ "$string" =~ ^-?[0-9]+$ ]]
then
echo $string is an integer
elif [[ "$string" =~ ^-?[0-9]*[.,]?[0-9]*$ ]]
then
echo $string is a float
elif [[ "$string" =~ ^-?[0-9]*[.,]?[0-9]*[eE]-?[0-9]+$ ]]
then
echo $string is a scientific number
else
echo $string is not a number
fi
দ্রষ্টব্য: আমরা দশমিক এবং বৈজ্ঞানিক স্বরলিপি জন্য সিনট্যাকটিকাল প্রয়োজনীয়তা তালিকাভুক্ত করতে পারি, একটি হ'ল কমেটাকে রেডিক্স পয়েন্ট হিসাবে অনুমোদিত করার পাশাপাশি ""। তারপরে আমরা দৃ as়ভাবে বলব যে এখানে কেবলমাত্র একটিরকম রেডিক্স পয়েন্ট থাকতে হবে। [Ee] ভাসায় দুটি +/- চিহ্ন থাকতে পারে। আমি আউলের কাজ থেকে আরও কিছু নিয়ম শিখেছি এবং '' '' - '' -E-1 '' 0-0 'এর মতো খারাপ স্ট্রিংয়ের বিরুদ্ধে পরীক্ষা করেছি। এখানে আমার রেজেক্স / সাবস্ট্রিং / এক্সপ্রেস সরঞ্জামগুলি মনে হচ্ছে যা ধরে রাখা হয়েছে:
parse_num() {
local r=`expr "$1" : '.*\([.,]\)' 2>/dev/null | tr -d '\n'`
nat='^[+-]?[0-9]+[.,]?$' \
dot="${1%[.,]*}${r}${1##*[.,]}" \
float='^[\+\-]?([.,0-9]+[Ee]?[-+]?|)[0-9]+$'
[[ "$1" == $dot ]] && [[ "$1" =~ $float ]] || [[ "$1" =~ $nat ]]
} # usage: parse_num -123.456
test && echo "foo" && exit 0 || echo "bar" && exit 1
আপনি যে পদ্ধতির ব্যবহার করছেন তাতে কিছু অনিচ্ছাকৃত পার্শ্ব প্রতিক্রিয়া থাকতে পারে - যদি প্রতিধ্বনি ব্যর্থ হয় (সম্ভবত আউটপুটটি একটি বন্ধ এফডি হয়), তবেexit 0
এই কোডটি বাদ দেওয়া হবে এবং কোডটি পরে চেষ্টা করবেecho "bar"
। এটিও যদি এটি ব্যর্থ হয় তবে&&
শর্তটি ব্যর্থ হবে এবং এটি কার্যকর হবে নাexit 1
!if
পরিবর্তে&&
/ প্রকৃত বিবৃতি ব্যবহার||
অপ্রত্যাশিত পার্শ্ব প্রতিক্রিয়াগুলির ঝুঁকির কম।