যদি আপনার $VARIABLEস্প্রিং বা অন্যান্য বিশেষ অক্ষরযুক্ত স্ট্রিং হয় এবং একক বর্গাকার বন্ধনী ব্যবহৃত হয় (যা testকমান্ডের শর্টকাট ), তবে স্ট্রিংটি একাধিক শব্দের মধ্যে বিভক্ত হয়ে থাকতে পারে। এগুলির প্রত্যেককে পৃথক যুক্তি হিসাবে বিবেচনা করা হয়।
যাতে একটি ভেরিয়েবলকে অনেকগুলি আর্গুমেন্টে বিভক্ত করা হয় :
VARIABLE=$(/some/command);
# returns "hello world"
if [ $VARIABLE == 0 ]; then
# fails as if you wrote:
# if [ hello world == 0 ]
fi
স্পেস বা অন্যান্য বিশেষ অক্ষরযুক্ত স্ট্রিং রাখে এমন কোনও ফাংশন কলের ক্ষেত্রেও এটি একই হবে।
সহজ ফিক্স
ভেরিয়েবল আউটপুটটিকে ডাবল কোটে আবদ্ধ করুন, এটিকে একটি স্ট্রিং (সুতরাং একটি যুক্তি) হিসাবে থাকতে বাধ্য করুন। উদাহরণ স্বরূপ,
VARIABLE=$(/some/command);
if [ "$VARIABLE" == 0 ]; then
# some action
fi
যে হিসাবে সহজ। তবে নীচে "এছাড়াও সাবধান ... ... এ যান" যদি আপনি গ্যারান্টি নাও দিতে পারেন তবে আপনার ভেরিয়েবলটি খালি স্ট্রিং, বা একটি স্ট্রিং যা শ্বেতস্থান ছাড়া কিছুই থাকবে না nothing
অথবা, একটি বিকল্প ফিক্স হ'ল ডাবল স্কোয়ার বন্ধনী ব্যবহার করা (যা এর জন্য একটি শর্টকাটnew test কমান্ডের )।
এটি কেবলমাত্র ব্যাশে (এবং দৃশ্যত কর্ন এবং জেডএসে) উপস্থিত রয়েছে এবং তাই ডাকাডাকি শেলগুলির সাথে এটি উপযুক্ত নয় by /bin/sh ইত্যাদি
এর অর্থ কয়েকটি সিস্টেমে এটি কনসোল থেকে কাজ করতে পারে তবে অন্য কোথাও যেমন বলা হয় তখন নয়cron সবকিছু কীভাবে কনফিগার করা হয় তার উপর নির্ভর করে।
এটি দেখতে এটি দেখতে হবে:
VARIABLE=$(/some/command);
if [[ $VARIABLE == 0 ]]; then
# some action
fi
যদি আপনার কমান্ডে এর মতো ডাবল স্কোয়ার ব্র্যাকেট থাকে এবং আপনি লগগুলিতে ত্রুটি পেয়ে থাকেন তবে এটি কনসোল থেকে কাজ করে, [[এখানে প্রস্তাবিত বিকল্পের জন্য অদলবদল করার চেষ্টা করুন, বা আপনার স্ক্রিপ্টটি যা চালায় সেগুলি শুল্ক ব্যবহার করে যা [[ওরফে সমর্থন করে new test।
এছাড়াও সাবধান [: unary operator expectedত্রুটি
যদি আপনি "অনেকগুলি যুক্তি" ত্রুটিটি দেখছেন, সম্ভাবনাগুলি আপনি অপ্রত্যাশিত আউটপুট সহ কোনও ফাংশন থেকে স্ট্রিং পাচ্ছেন। যদি খালি স্ট্রিং (বা সমস্ত সাদা স্থানের স্ট্রিং) পাওয়াও সম্ভব হয় তবে এটি উপরের "দ্রুত সমাধান" দিয়েও শূন্য আর্গুমেন্ট হিসাবে বিবেচিত হবে এবং এতে ব্যর্থ হবে[: unary operator expected
আপনি যদি অন্য ভাষাতে ব্যবহার করেন তবে এটি একই 'গ্যাচা' - আপনি কোনও ভেরিয়েবলের বিষয়বস্তুগুলি মূল্যায়নের আগে কোডটিতে কার্যকরভাবে মুদ্রিত হওয়ার আশা করেন না।
এখানে একটি উদাহরণ যা ত্রুটি [: too many argumentsএবং [: unary operator expectedত্রুটি উভয়ই প্রতিরোধ করে : আউটপুটটি খালি থাকলে (এই উদাহরণে 0) পুরোপুরি ডাবল উদ্ধৃতি দিয়ে প্রতিস্থাপন করা :
VARIABLE=$(/some/command);
if [ "${VARIABLE:-0}" == 0 ]; then
# some action
fi
(এখানে, AR ভারিবেল 0 বা ফাঁকা থাকলে ক্রিয়াটি ঘটবে Natural স্বাভাবিকভাবে, ভিন্ন আচরণ চাইলে আপনার 0 (ডিফল্ট মান )টিকে আলাদা ডিফল্ট মানে পরিবর্তন করা উচিত)
চূড়ান্ত দ্রষ্টব্য: যেহেতু [একটি শর্টকাট testতাই উপরের সমস্তগুলি ত্রুটির জন্যও সত্য test: too many arguments(এবং এটিও test: unary operator expected)