নিম্নলিখিত কোড দেয়
[: -ge: unary অপারেটর প্রত্যাশিত
কখন
i=0
if [ $i -ge 2 ]
then
#some code
fi
কেন?
নিম্নলিখিত কোড দেয়
[: -ge: unary অপারেটর প্রত্যাশিত
কখন
i=0
if [ $i -ge 2 ]
then
#some code
fi
কেন?
উত্তর:
আপনার সমস্যাটি $i
যখন আপনার বিবৃতি ব্যর্থ হয় তখন একটি ফাঁকা মান থাকে fact তুলনা সম্পাদন করার সময় সর্বদা আপনার ভেরিয়েবলগুলি উদ্ধৃত করুন যদি তাদের মধ্যে কোনওটি খালি থাকার সামান্যতম সম্ভাবনা থাকে তবে যেমন:
if [ "$i" -ge 2 ] ; then
...
fi
এটি শেলটি কীভাবে চলকগুলির সাথে আচরণ করে তা এই কারণেই। আসল উদাহরণটি ধরুন,
if [ $i -ge 2 ] ; then ...
সেই নির্দিষ্ট কোডের লাইনটি কার্যকর করার সময় শেলটি প্রথমে যা করে তা হ'ল $i
আপনার পছন্দসই সম্পাদকের অনুসন্ধান এবং প্রতিস্থাপন ফাংশনটির মতো মানটির বিকল্প হয় । সুতরাং ধরুন যে $i
খালি বা আরও চিত্রের, $i
এটি একটি গোছা জায়গা! শেলটি $i
নিম্নরূপে প্রতিস্থাপন করবে :
if [ -ge 2 ] ; then ...
এখন যেহেতু পরিবর্তনশীল বদল করা হয় তুলনা সঙ্গে শেল আয় এবং .... ব্যর্থ হয়েছে কারণ এটি কিছু বোধগম্য দেখতে পারে না বাম এর -gt
। তবে, উদ্ধৃত $i
:
if [ "$i" -ge 2 ] ; then ...
হয়ে:
if [ " " -ge 2 ] ; then ...
শেলটি এখন ডাবল-কোটগুলি দেখে এবং জানে যে আপনি আসলে চারটি ফাঁকা অংশ 2 এর সাথে তুলনা করছেন এবং এড়িয়ে যাবেন if
।
আপনার শূন্য $i
হলে ডিফল্ট মান নির্দিষ্ট করার বিকল্প রয়েছে $i
:
if [ "${i:-0}" -ge 2 ] ; then ...
মান 0 পরিবর্তে প্রতিস্থাপন করে দেবে $i
হয় $i
অনির্দিষ্ট করা হয়। আমি এখনও উদ্ধৃতিগুলি বজায় রাখছি কারণ, আবারও, যদি $i
ফাঁকা গোছা হয় তবে এটি অপরিজ্ঞাত হিসাবে গণনা করা হয় না , এটি 0 দিয়ে প্রতিস্থাপন করা হবে না এবং আপনি আবারও সমস্যার মধ্যে চলে যাবেন।
অনুগ্রহ করে পড়ুন এই যখন আপনি সময় আছে। শেলটি একটি কালো বাক্সের মতো অনেকের দ্বারা চিকিত্সা করা হয় তবে এটি খুব কম এবং খুব সাধারণ নিয়মের সাথে পরিচালিত হয় - একবার আপনি এই নিয়মগুলি কী তা সম্পর্কে অবগত হন (তাদের মধ্যে একটি শেলের মধ্যে চলকগুলি কীভাবে কাজ করবে, উপরে বর্ণিত হিসাবে) শেলটি হবে তোমার জন্য আর কোন গোপন রহস্য নেই।
আমার আমার 5 সেন্ট যুক্ত করতে হবে। আমি প্রত্যেকে ব্যবহার করে দেখছি [
বা [[
, তবে এটি উল্লেখ করার মতো যে তারা সিনট্যাক্সের অংশ নয়।
পাটিগণিত তুলনার জন্য, ((...))
পরিবর্তে ব্যবহার করুন।
((...)) একটি গাণিতিক কমান্ড, যা এক্সপ্রেশনটি ননজারো হলে 0 এর প্রস্থান স্থিতি বা এক্সপ্রেশনটি শূন্য হলে 1 প্রদান করে। পার্শ্ব প্রতিক্রিয়া (অ্যাসাইনমেন্ট) প্রয়োজন হলে, "লেট" এর প্রতিশব্দ হিসাবেও ব্যবহৃত হয়।
দেখুন: গাণিতিক এক্সপ্রেসন
আপনার স্ক্রিপ্টের টুকরোটি দুর্দান্ত কাজ করে। আপনি কি নিশ্চিত যে "আই" এর আগে আপনি অন্য কিছু বরাদ্দ করছেন না?
একটি সাধারণ ভুলটি বর্গাকার বন্ধনীগুলির পরে এবং তার আগে কোনও স্থান ছেড়ে না যাওয়া।