বাশ স্ক্রিপ্টে পাস হওয়া আর্গুমেন্টের সংখ্যাটি আমি কীভাবে খুঁজে পাব?


182

বাশ স্ক্রিপ্টে পাস হওয়া আর্গুমেন্টের সংখ্যাটি আমি কীভাবে খুঁজে পাব?

আমার কাছে বর্তমানে এটি রয়েছে:

#!/bin/bash
i=0
for var in "$@"
do
  i=i+1
done

এটি করার আরও কি আরও ভাল উপায় আছে?


4
যদি কোনও যুক্তি উপস্থিত থাকে তবে এই কোডটি কেবল i+1ভেরিয়েবলের মধ্যে আক্ষরিক স্ট্রিংটি সংরক্ষণ করে i
ফিলিপ

উত্তর:


279

যুক্তি সংখ্যা $#

আরও জানতে এই পৃষ্ঠায় এটি অনুসন্ধান করুন: http://tldp.org/LDP/abs/html/internvariables.html#ARGLIST


36
নির্মল করতে: অসদৃশ argcমধ্যে সি-মত ভাষা, $#হতে হবে 0যদি সেখানে কোন যুক্তি স্ক্রিপ্ট প্রেরণ হয়, 1যদি সেখানে একটি আর্গুমেন্ট, ইত্যাদি হয়
ভ্লাদিমির Panteleev

99
#!/bin/bash
echo "The number of arguments is: $#"
a=${@}
echo "The total length of all arguments is: ${#a}: "
count=0
for var in "$@"
do
    echo "The length of argument '$var' is: ${#var}"
    (( count++ ))
    (( accum += ${#var} ))
done
echo "The counted number of arguments is: $count"
echo "The accumulated length of all arguments is: $accum"

এটি আমাকেও সাহায্য করেছিল, যা আমি করার চেষ্টা করছিলাম; "$ @" do ((যোগ + + = $ ভার)) ((গণনা ++)) সম্পন্ন ((গড় = সমষ্টি / $ গণনা)) প্রতিধ্বনি "" এর জন্য #! / বিন / বশ কাউন্ট = 0 সমষ্টি = 0 গড় = 0 সংখ্যার যোগফল হ'ল: সংখ্যার যোগফল "প্রতিধ্বনি" হয়: $ গড় "যা আমাকে অজানা আরোগুলি সংখ্যা পেতে এবং কিছু গণিত করতে সহায়তা করে (আপনি অপারেণ্ড সম্পাদনা করতে পারেন) ডেনিস উইলিয়ামসনের জন্য ধন্যবাদ, আমি এটি করেছি। আমি কোড পোস্ট করছি কারণ এটি কারওর জন্য উপযোগী হতে পারে।
কান ইলমজ

1
@ কাণ্যলমাজ: এর সাথে একমাত্র সমস্যা হ'ল বাশ কেবল পূর্ণসংখ্যার গাণিতিক কাজ করে। আপনি যদি দশমিক চান, আপনি AWK bc, বা অন্য কিছু ব্যবহার করতে হবে (ksh93 এবং zsh এছাড়াও দশমিক গণিত করতে পারে)। আপনার কোডে কিছু ভেরিয়েবলের জন্য ডলার চিহ্ন অন্তর্ভুক্ত রয়েছে, তবে অন্য নয়। এগুলি ব্যবহার সম্পর্কে আপনার সামঞ্জস্য থাকা উচিত। ভিতরে (())তারা প্রয়োজন হয় না। তারা অবশ্য echoবিবৃতিতে রয়েছে।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

আমি লিনাক্সের সাথে খুব ভাল নই, আমার প্রয়োজন হিসাবে আমি কেবল আপনার কোডটি পরিবর্তন করেছি। এটি মূলত আপনার কোডটি হল
Kaan yılmaz

কোডটির জন্য ধন্যবাদ, এটি খুব ভাল।
স্মিটারলিঙ্ক

12

মূল রেফারেন্স যুক্ত করতে:

আপনি বিশেষ পরামিতি থেকে আর্গুমেন্টের সংখ্যা পেতে পারেন $#। 0 এর মান অর্থ "কোনও যুক্তি নেই"। $#কেবল পঠনযোগ্য।

যখন shiftআর্গুমেন্ট প্রসেসিংয়ের সাথে একত্রে ব্যবহৃত হয় , $#প্রতিবার বাশ বিল্টিনকে shiftমৃত্যুদন্ড কার্যকর করার সময় বিশেষ পরামিতি হ্রাস করা হয়।

বিভাগের ৪.৪.২ রেফারেন্স ম্যানুয়ালটি দেখুন বিশেষ পরামিতি :

  • "শেলটি বেশ কয়েকটি পরামিতি বিশেষভাবে বিবেচনা করে These এই পরামিতিগুলি কেবলমাত্র উল্লেখ করা যেতে পারে "

  • এবং এই বিভাগে কীওয়ার্ডের জন্য $ # "দশমিকের অবস্থানগত পরামিতিগুলির সংখ্যাতে প্রসারিত হয়" "


-1

নীচে সহজ এক -

বিড়াল countvariable.sh

echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'

আউটপুট:

#./countvariable.sh 1 2 3 4 5 6
6
#./countvariable.sh 1 2 3 4 5 6 apple orange
8

3
হিসাবে লেখা যেতে পারেecho "$@" | awk '{print NF}'
user000001

-6

যে মানটি ভেরিয়েবলের মধ্যে রয়েছে $#


4
4 বছরের পুরানো প্রায় সঠিক (তবে সঠিক) উত্তরটি ছাড়াও, আপনার উত্তরটি ভুল - এটি হওয়া উচিত$#
Nachteil
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.