ব্যাশে পূর্ণসংখ্যার সাথে তুলনা করুন, আনারি অপারেটর প্রত্যাশিত


উত্তর:


295

আপনার সমস্যাটি $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 দিয়ে প্রতিস্থাপন করা হবে না এবং আপনি আবারও সমস্যার মধ্যে চলে যাবেন।

অনুগ্রহ করে পড়ুন এই যখন আপনি সময় আছে। শেলটি একটি কালো বাক্সের মতো অনেকের দ্বারা চিকিত্সা করা হয় তবে এটি খুব কম এবং খুব সাধারণ নিয়মের সাথে পরিচালিত হয় - একবার আপনি এই নিয়মগুলি কী তা সম্পর্কে অবগত হন (তাদের মধ্যে একটি শেলের মধ্যে চলকগুলি কীভাবে কাজ করবে, উপরে বর্ণিত হিসাবে) শেলটি হবে তোমার জন্য আর কোন গোপন রহস্য নেই।


7
ভেরিয়েবলের
উদ্ধৃতিটি

@ নস্টর ভুল , একটি ভেরিয়েবল উদ্ধৃত করা ভেরিয়েবল সংখ্যাসূচক হলে প্রত্যাশিত পূর্ণসংখ্যার মত নতুন ত্রুটি উত্থাপন করবে না ; একটি সংখ্যাসূচক ভেরিয়েবলের মান প্রদান করা, উদ্ধৃত হোক বা না হোক, ত্রুটি ঘটবে result
ভ্লাদর

6

ত্রুটি বার্তাটি বিচার করে আমি 0 টি নয়, যখন এটি কার্যকর করি তখন আমার মানটি খালি স্ট্রিং ছিল।


6

আমার আমার 5 সেন্ট যুক্ত করতে হবে। আমি প্রত্যেকে ব্যবহার করে দেখছি [বা [[, তবে এটি উল্লেখ করার মতো যে তারা সিনট্যাক্সের অংশ নয়।

পাটিগণিত তুলনার জন্য, ((...))পরিবর্তে ব্যবহার করুন।

((...)) একটি গাণিতিক কমান্ড, যা এক্সপ্রেশনটি ননজারো হলে 0 এর প্রস্থান স্থিতি বা এক্সপ্রেশনটি শূন্য হলে 1 প্রদান করে। পার্শ্ব প্রতিক্রিয়া (অ্যাসাইনমেন্ট) প্রয়োজন হলে, "লেট" এর প্রতিশব্দ হিসাবেও ব্যবহৃত হয়।

দেখুন: গাণিতিক এক্সপ্রেসন


2

আপনার স্ক্রিপ্টের টুকরোটি দুর্দান্ত কাজ করে। আপনি কি নিশ্চিত যে "আই" এর আগে আপনি অন্য কিছু বরাদ্দ করছেন না?

একটি সাধারণ ভুলটি বর্গাকার বন্ধনীগুলির পরে এবং তার আগে কোনও স্থান ছেড়ে না যাওয়া।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.