শেলের 10 টিরও বেশি পরামিতি কীভাবে পরিচালনা করবেন


101

আমি লিনাক্সে বাশ শেল ব্যবহার করছি এবং শেল স্ক্রিপ্টে 10 টিরও বেশি পরামিতি ব্যবহার করতে চাই


8
নোট করুন যে 10 টি প্যারামিটার থাকা এটি বেশ বিভ্রান্তিকর করে তুলবে। পরিবর্তে বিকল্পগুলি (যেমন -a 1বা --foo=bar) ব্যবহার করা ভাল । দেখুন man getopt, man getoptsএবং এটি করার man bashজন্য কিছু বিকল্পের জন্য।
মাইকেল

উত্তর:


158

এগুলি বন্ধ করতে কোঁকড়া ধনুর্বন্ধনী ব্যবহার করুন:

echo "${10}"

আপনি এর মতো অবস্থানগত পরামিতিগুলিতে পুনরাবৃত্তি করতে পারেন:

for arg

অথবা

for arg in "$@"

অথবা

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done

2
মনে রাখবেন যে ash {10 b ব্যাশে কাজ করবে, তবে আপনার বহনযোগ্যতা সীমাবদ্ধ করবে যেহেতু sh এর অনেকগুলি বাস্তবায়ন কেবলমাত্র একক ডিজিটের নির্দিষ্টকরণের অনুমতি দেয়।
উইলিয়াম পার্সেল

1
@ উইলিয়াম: এমন কিছু শেল রয়েছে যা এটি গ্রহণ করবে না, যেমন আসল লিগ্যাসি বোর্ন শেল, তবে শেলগুলি ছাড়াও আমি অন্য একটি মন্তব্যে (বাশ, ড্যাশ, কেএসএ এবং জেডএস) তালিকাভুক্ত করেছি, এটি সিএসএস, টিসিএসএস-এও কাজ করে এবং ব্যস্তবক্স অ্যাশ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

1
@ উইলিয়ামম্পর্সেল পসিএক্স${10}
স্টিভেন পেনি

2
সম্পর্কে উদ্বেজক ${10}পরিশ্রমী শুধুমাত্র প্রয়োজনীয় যখন খুব পুরানো বাস্তবায়নের যা মান সঙ্গতিশীল নয় ব্যবহার করে। সম্ভবত কেবল historicalতিহাসিক আগ্রহের ... এবং এখনও আমি এখনও এটি কখনও ব্যবহার করতে পারি না! আমি মনে করি কারণ সর্বোত্তম অনুশীলন হ'ল 10 টি যুক্তি পুনরাবৃত্তি না করা পর্যন্ত অনেক "$@"বেশি, এক্ষেত্রে আপনি সেগুলি গণনা না করে তাদের দ্বারা পুনরাবৃত্তি করবেন।
উইলিয়াম পার্সেল

22

আপনার 0 থেকে 255 পর্যন্ত 256 পরামিতি থাকতে পারে:

${255}

5
আমি মনে করি যে সীমাটি শেলের উপর নির্ভরশীল। বাশ, ড্যাশ, কেএসএল এবং জেডএস এর কাছে নেই বলে মনে হচ্ছে। sh -c 'echo ${333}' /usr/bin/*
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

3
আমার শেলটি আরামে 2 মিলিয়নে যায়set $(seq 2097152); echo ${2097152}
স্টিভেন পেনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.