আমি লিনাক্স লোক নই তবে আমার প্রকল্পের জন্য আমাকে পড়তে হবে এমন কিছু স্ক্রিপ্টে আটকেছি। সুতরাং এই আদেশটি কি করছে কেউ আমাকে সহায়তা করতে পারে?
shift $(($optind - 1))
আমি লিনাক্স লোক নই তবে আমার প্রকল্পের জন্য আমাকে পড়তে হবে এমন কিছু স্ক্রিপ্টে আটকেছি। সুতরাং এই আদেশটি কি করছে কেউ আমাকে সহায়তা করতে পারে?
shift $(($optind - 1))
উত্তর:
shift $((OPTIND-1))(দ্রষ্টব্য OPTINDআপার ক্ষেত্রে) সাধারণত একটি getopts whileলুপ পরে অবিলম্বে পাওয়া যায় । $OPTINDদ্বারা প্রাপ্ত বিকল্পগুলির সংখ্যা getopts।
যেমন পলজোহন 32 মন্তব্যে উল্লেখ করেছে, কঠোরভাবে বললে, পরবর্তী কমান্ড লাইন আর্গুমেন্টের OPTINDঅবস্থান দেয় ।
জিএনইউ বাশ রেফারেন্স ম্যানুয়াল থেকে :
গেমপটস অপটস্ট্রিং নাম [টি]
getoptsঅবস্থানগত পরামিতিগুলি পার্স করতে শেল স্ক্রিপ্টগুলি ব্যবহার করা হয়।optstringস্বীকৃতি পাওয়ার জন্য বিকল্প অক্ষর রয়েছে; যদি কোনও চরিত্রটি কোলন অনুসরণ করে, তবে বিকল্পটির একটি আর্গুমেন্ট থাকবে বলে আশা করা হচ্ছে, যা এটি সাদা স্থান দ্বারা পৃথক করা উচিত। কোলন (':') এবং প্রশ্ন চিহ্ন ('?') বিকল্প অক্ষর হিসাবে ব্যবহার করা যাবে না। প্রতিবার এটি প্রার্থনা করা হয়,getoptsশেল পরিবর্তনশীল নামে পরবর্তী বিকল্প স্থান, আরম্ভেরnameযদি এটা বিদ্যমান নয়, এবং পরবর্তী যুক্তি সূচক পরিবর্তনশীল মধ্যে প্রক্রিয়া হওয়ারOPTIND।OPTINDপ্রতিবার শেল বা শেল স্ক্রিপ্ট শুরু হওয়ার সাথে সাথে প্রথমে 1 টি করা হয়। যখন কোনও বিকল্পের জন্য একটি আর্গুমেন্টের প্রয়োজন হয়, গিওপ্টস যুক্তিটিকে ভেরিয়েবলের মধ্যে রাখেOPTARG। শেলটি রিসেট হয় নাOPTINDস্বয়ংক্রিয়ভাবে;getoptsযদি প্যারামিটারগুলির একটি নতুন সেট ব্যবহার করা হয় তবে এটি অবশ্যই একই শেল আহ্বানের মধ্যে একাধিক কলগুলির মধ্যে ম্যানুয়ালি পুনরায় সেট করতে হবে।বিকল্পগুলির শেষের মুখোমুখি হলে,
getoptsশূন্যের চেয়ে বড় রিটার্ন সহ প্রস্থান করে।OPTINDপ্রথম অ-বিকল্পের যুক্তির সূচীতে সেট করা আছে এবং নামটি '?' তে সেট করা আছে।
getoptsস্বাভাবিকভাবে অবস্থানগত পরামিতি parses, কিন্তু আর্গুমেন্ট দেওয়া হয় যদিargs,getoptsঐ পরিবর্তে parses।
shift n অবস্থানগত পরামিতিগুলির তালিকা থেকে এন স্ট্রিংগুলি
সরিয়ে দেয় । এইভাবে প্যারামিটার তালিকা থেকে পার্স করা সমস্ত বিকল্প সরিয়ে দেয় এবং সুতরাং সেই বিন্দুর পরে, স্ক্রিপ্টে পাস হওয়া প্রথম অ-বিকল্প যুক্তিটি উল্লেখ করবে।shift $((OPTIND-1))getopts$1
হালনাগাদ
মাইক্রজার যেমন মন্তব্যে উল্লেখ করেছেন, shift $((OPTIND-1))অনিরাপদ হতে পারে। অযাচিত শব্দ বিভাজন ইত্যাদি প্রতিরোধ করতে সমস্ত প্যারামিটারের বিস্তৃতি ডাবল-কোট করা উচিত। কমান্ডের জন্য নিরাপদ ফর্ম হয়
shift "$((OPTIND-1))"
find) পারে চেহারা তারা অ অপশন পর অপশন অনুমতি, কিন্তু তারা না: তারা operands যে একটি ড্যাশ দিয়ে শুরু আছে।
IFS, তবে দুঃখিতের চেয়ে নিরাপদ থাকা ভাল। ;)
IFS=0123456789, shift $((OPTIND-1))(উদ্ধৃতি ব্যতীত) রূপান্তরিত হয় shift ""যা নিঃশব্দে উপেক্ষা করা হবে (ইন ksh) বা ত্রুটি তৈরি করবে (এবং bashএবং dash)।
$((...))শুধু স্টাফ গণনা। আপনার ক্ষেত্রে এটির মান নেয় $optintএবং 1 টি বাদ দেয়।
shiftঅবস্থানগত পরামিতি অপসারণ। আপনার ক্ষেত্রে এটি optint-1পরামিতিগুলি সরিয়ে দেয় ।
আরও তথ্যের জন্য কটাক্ষপাত আছে help getopts, help shiftএ বর্ণন man bash"পাটিগণিত সম্প্রসারণ" জন্য, বিশেষ করে এর জন্য Google getopts।