কমান্ডের কোনও পরামিতি সরবরাহ করা হয়নি কিনা তা কীভাবে পরীক্ষা করবেন?


73

$*খালি থাকলে কীভাবে পরীক্ষা করবেন ? অন্য কথায়, কোনও কমান্ডকে কোনও আর্গুমেন্ট সরবরাহ করা হয়নি কিনা তা কীভাবে পরীক্ষা করবেন?

উত্তর:


110

কমান্ডটিতে কোনও আর্গুমেন্ট সরবরাহ করা হয়নি কিনা তা পরীক্ষা করতে $#ভেরিয়েবলের মান পরীক্ষা করে দেখুন ,

if [ $# -eq 0 ]; then
    echo "No arguments provided"
    exit 1
fi

আপনি যদি ব্যবহার করতে চান $*( পছন্দসই না ) তবে,

if [ "$*" == "" ]; then
    echo "No arguments provided"
    exit 1
fi

কিছু ব্যাখ্যা:

দ্বিতীয় পন্থাটি পছন্দনীয় নয় কারণ অবস্থানগত পরামিতিগুলিতে *এক থেকে শুরু করে অবস্থানীয় পরামিতিগুলিতে প্রসারিত হয়। ডাবল উদ্ধৃতিগুলির মধ্যে যখন প্রসারণ ঘটে তখন এটি আইএফএস বিশেষ ভেরিয়েবলের প্রথম অক্ষর দ্বারা পৃথক পৃথক প্রতিটি প্যারামিটারের মান সহ একটি শব্দে প্রসারিত হয়। তার মানে একটি স্ট্রিং তৈরি করা হয়েছে। সুতরাং অতিরিক্ত ওভারহেড আছে।

অন্যদিকে #অবস্থানগত পরামিতিগুলির সংখ্যাতে প্রসারিত।

উদাহরণ:

$ command param1 param2

এখানে,

মান $#2 হয় এবং $*আইএফএস আনসেট না থাকলে মানটি "প্যারাম 1 প্যারাম 2" (উদ্ধৃতি ব্যতীত) হয় is কারণ যদি আইএফএসটি সেট না করা থাকে তবে পরামিতিগুলি স্পেস দ্বারা পৃথক করা হয়

বিশেষ বিবরণ man bashএবং বিশেষ পরামিতি নামের বিষয় পড়ার জন্য


5
বা if ! (($#)); ..., বা if (($# == 0)); ..., বা if [ $# -eq 0 ]; ..., বা ! (($#)) && ..., বা(($#)) || ...
নিকরোবট

7
[ $# -eq 0 ]আইএমই সবচেয়ে সাধারণ ফর্ম। "$#"খালি থাকতে পারে এমন প্রান্তের কেস রয়েছে : যদি একক যুক্তি থাকে যা খালি থাকে, বা যদি বেশ কয়েকটি খালি যুক্তি থাকে এবং $IFSখালি থাকে।
গিলস

1
"$*"অভিব্যক্তি এছাড়াও মূল্যায়ন করবে ""যদি শুধুমাত্র একটি ""প্যারামিটার পাস হয়। তবে বেশিরভাগ সময় আপনি সম্ভবত কোনওভাবেই চিন্তা করবেন না।
manatwork

আমি বিশ্বাস করি এটি == এর পরিবর্তে = হওয়া উচিত ... বর্তমানে আমি অপ্রত্যাশিত অপারেটরের ত্রুটি পেয়েছি এবং = এ পরিবর্তনের ফলে সমস্যাটি স্থির হয়েছে।
ভাল আসলে

@ চার্লোট এর অর্থ আপনি ব্যবহার করছেন না bash। আপনি shস্ক্রিপ্টটি কার্যকর করতে ব্যবহার করছেন । এএফআইকে ==কেবলমাত্র বৈধ bash
শচীন দিবেকার

14

যদি আপনি কেবলমাত্র কোনও যুক্তি অনুপস্থিত থাকে তবে জামিনে আগ্রহী, প্যারামিটার সাবস্টিটিউশন দুর্দান্ত:

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT

-4

আপনি যে কোনও যুক্তি পেয়েছেন তা আপনি জানতে পারবেন এটির একটি উপায়

NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
    {do something}
fi

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