গোটোপস ব্যবহার করে পার্সড আইটেমগুলি টেনে আনার পরে আমি কীভাবে অবশিষ্ট আরগগুলি পেতে পারি?


14

আমি getopts ব্যবহার করে ব্যাশ স্ক্রিপ্টে কিছু যুক্তি বিশ্লেষণ করতে চাই তবে বিকল্প তালিকার অন্তর্ভুক্ত নয় এমন বাকী আরোগুলি অ্যাক্সেস করতে সক্ষম হতে চাই। সুতরাং উদাহরণস্বরূপ, যদি আমার কোনও কল থাকে:

% script -a -b param -c param -d other arguments here

আমার হবে:

while getopts "ab:c:d" opt ; do
.
done

"এখানে অন্যান্য যুক্তি" পাওয়ার সহজতম উপায় কী, যা গিওপ্টস দ্বারা অপসারণ করা উচিত?

উত্তর:


17

আপনি যখন একটি আরগকে বিশ্লেষণ করবেন বা রাখবেন তখন আপনাকে শিফট করতে হবে

পার্সিং শেষ করার পরে শিফট $ ((অপ্টিন্ড -১)), তারপরে সাধারণ পদ্ধতিতে ডিল যেমন

while getopts "ab:c:d" opt ; do
.
done
shift $(expr $OPTIND - 1 )

while test $# -gt 0; do
  echo $1
  shift
done

1
এটি ব্যাখ্যা করার মতো, যে get অপটিন্ড হ'ল প্রতিটি বিকল্পগুলি চালানোর পরে বিবেচনার জন্য পরবর্তী বিকল্পের সূচক। সুতরাং $ * এ 3 টি পরামিতি রয়েছে, এটির প্রথম বৈধ কলটি 2 এর পরে এবং দ্বিতীয়টি 3 টি the তাই আপনি যদি প্যারামিটার 1 বৈধ নয়, OPTIND 1 হতে হবে (অত: পর উপরের উদাহরণে ইচ্ছা shift $(expr 1 - 1)যা নিরাপদ।
sibaz

0

বিশ্লেষণের শেষে, একবার আপনি পরিবর্তনশীল shifted @ স্থানান্তরিত করলে লাইনের শেষটি থাকে:

while getopts "ab:c:d" opt ; do
.
done
shift $((OPTIND-1))
OTHERARGS=$@
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.