উদাহরণস্বরূপ, যদি আমার কাছে স্ক্রিপ্ট থাকে ./foo যা 10 টি প্যারামিটার নেয় এবং আমি কেবলমাত্র 8 তম প্যারামিটারটি পাস করতে চাই। বর্তমানে এটি কীভাবে করা যায় তা আমি জানতে পারি:
./foo '' '' '' '' '' '' '' 'bar'
কোন সহজ / উন্নত উপায় আছে?
উদাহরণস্বরূপ, যদি আমার কাছে স্ক্রিপ্ট থাকে ./foo যা 10 টি প্যারামিটার নেয় এবং আমি কেবলমাত্র 8 তম প্যারামিটারটি পাস করতে চাই। বর্তমানে এটি কীভাবে করা যায় তা আমি জানতে পারি:
./foo '' '' '' '' '' '' '' 'bar'
কোন সহজ / উন্নত উপায় আছে?
উত্তর:
এই জিনিসটি করার আরেকটি উপায় হ'ল আপনি যে প্যারামিটারটি ঘোষণা করতে চান তার নামকরণ এবং তারপরে এটি করা:
{ cat >./foo
chmod +x ./foo
eight=declared ./foo
eight=declared_and_preferred \
./foo 1 2 3 4 5 6 7 8
./foo 1 2 3 4 5 6 7 8
./foo
} <<\SCRIPT
#!/usr/bin/sh
: ${eight:=${8:-some_default}}
printf '$eight = %s\n' "$eight"
#END
SCRIPT
$eight = declared
$eight = declared_and_preferred
$eight = 8
$eight = some_default
উপরের উদাহরণে স্পষ্টভাবে ঘোষিত পরিবেশ পরিবর্তনশীলটি কমান্ড-লাইন আর্গুমেন্টের পক্ষে অগ্রাধিকার দেওয়া হয়, তবে পরিবেশ ভেরিয়েবলটি ফাঁকা বা আনসেট না হলে কমান্ড-লাইন যুক্তি ব্যবহৃত হয় used যখন 8 তম অবস্থানগত এবং পরিবেশের ভেরিয়েবল $eight
উভয়ই খালি থাকে বা ডিফল্ট মানটি সেট না করে কিছু_ডেফাল্ট নির্ধারিত হয় $eight
। উভয় ক্ষেত্রেই খালি গ্রহণযোগ্য মান হওয়া উচিত বা বিবৃতি :
থেকে সরানো যেতে পারে ।:-
:=
পরিবর্তনশীল $eight
পাশাপাশি সেট করা যেতে পারে:
printf '$eight = %s\n' "${eight:=${8:-some_default}}"
... এবং পূর্ববর্তী লাইনটি পুরোপুরি বাদ দেওয়া হয়েছিল তবে আমি প্রদর্শন করতে চেয়েছিলাম যে এভাবে চলক ঘোষণার ফলে স্থির মান হয় এবং তাই আমি এটি দুটি কমান্ডে করেছিলাম। যে কোনও উপায়ে $eight
সেই যৌগিক প্যারামিটার বিস্তারের চূড়ান্ত মান সেট করা আছে।
getopts
- শক্তিশালী স্ক্রিপ্টগুলির জন্য - প্রায়শই হ'ল কমান্ড বিকল্পগুলি হ্যান্ডেল করার সর্বোত্তম উপায় । অন্যদিকে অবস্থানগত প্যারামিটারগুলি প্রায়শই সর্বদা একটি স্ক্রিপ্টে দৃust ়তার সাথে পরিচালনা করার সবচেয়ে সহজ উপায় ।
উদাহরণ স্বরূপ:
touch file$(seq -ws\ file 100)
./foo *
$eight = file008
সেখানে আমরা কেবল অষ্টম অপারেন্ড দেখতে পাচ্ছি, তবে আমার পরীক্ষা ডিরেক্টরি থেকে তাদের 101 টি গ্লোববেড রয়েছে।
আপনি স্ক্রিপ্টটি পরিবর্তন করতে পারবেন তা ধরে নিয়ে, আপনার প্রয়োজনীয় প্যারামিটারগুলির (আর্গুমেন্ট) পরিবর্তে paraচ্ছিক পরামিতি (বিকল্পগুলি) ব্যবহার করা উচিত।
আপনার যদি বিকল্প হিসাবে প্রথম 7 টি সাতটি পরামিতি থাকে এবং খালি স্ট্রিংয়ে সেগুলি ডিফল্ট করে থাকে তবে আপনি কেবল এটি করতে পারেন:
./foo bar
আপনি যদি পসিক্স-সামঞ্জস্যপূর্ণ শেল ব্যবহার করেন তবে আপনি getopts
ইউটিলিটি বা প্রোগ্রামটি ব্যবহার করতে পারেন getopt
। bash
- বেশিরভাগ শাঁসের মতো - getopts
বিল্ট-ইন হিসাবে অফার দেয় । আপনার নিজস্ব কমান্ড-লাইন পার্সার রোল করার চেয়ে যে কোনও উপায়ে সহজ।
আপনি যদি সর্বশেষ এক্স অ-বিকল্প আর্গুমেন্টের মতো কোনও কিছু কার্যকর না করেন তবে আপনি যদি কোনও সেটিং সেট করতে চান তবে আপনার 7 টি (এখন খালি) স্ট্রিংয়ের আগে বিকল্প স্ট্রিংগুলি সরবরাহ করতে হবে XY বিকল্প যুক্তিগুলির জন্য মানগুলি। এটি তবে সাধারণ অনুশীলন নয়, সাধারণত একটি বিকল্প সর্বদা একটি বিকল্প এবং একটি যুক্তি একটি আর্গুমেন্ট এবং "সন্নিবেশ" বিকল্পের ক্রমটি বিনামূল্যে।
+1
জন্য getopt(s)
। অবস্থানগত পরামিতিগুলি একটি দুঃখের সময়, এবং এড়ানো উচিত।