मुझे बैश स्क्रिप्ट में दी गई तर्कों की संख्या कैसे मिलेगी?


182

मुझे बैश स्क्रिप्ट में दी गई तर्कों की संख्या कैसे मिलेगी?

वर्तमान में मेरे पास यही है:

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

क्या ऐसा करने के अन्य (बेहतर) तरीके हैं?


4
यदि कोई तर्क मौजूद है तो यह कोड बस शाब्दिक स्ट्रिंग i+1को चर में संग्रहीत करेगा i
फिलिप

जवाबों:


279

तर्कों की संख्या है $#

अधिक जानने के लिए इस पेज पर इसे खोजें: http://tldp.org/LDP/abs/html/internalvariables.html.html खोज


36
स्पष्ट करने के लिए: argcसी-लाइक भाषाओं के विपरीत , $#यह होगा 0कि क्या स्क्रिप्ट में कोई तर्क पारित नहीं 1होता है , अगर एक तर्क है, आदि
व्लादिमीर पेंटेलेव

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"

इससे मुझे भी मदद मिली, जिसे मैं करने की कोशिश कर रहा था; # /! / बिन / बाश गिनती = "$ @" करने में (var (= + $ var)) ((गिनती ++)) ((avg = sum / $ count)) echo "" संख्याओं का योग है: संख्याओं का $ योग "प्रतिध्वनि" औसत है: $ avg "जो मुझे आर्ग की संख्याओं को अनकाउंट करने में मदद करता है और कुछ गणित करता है (आप ओपेरा को संपादित कर सकते हैं) डेनिस विलियमसन के लिए धन्यवाद, मैंने यह किया। मैं कोड पर पोस्ट कर रहा हूं क्योंकि यह किसी के लिए उपयोगी हो सकता है।
कां यलमज़

1
@ kaanyılmaz: इसके साथ एकमात्र समस्या यह है कि बैश केवल पूर्णांक अंकगणित करता है। यदि आप दशमलव चाहते हैं, तो आपको AWK bc, या कुछ और (ksh93 और zsh दशमलव गणित भी कर सकते हैं) का उपयोग करने की आवश्यकता होगी । आपके कोड में कुछ चर के लिए डॉलर के संकेत शामिल हैं, लेकिन अन्य नहीं। आपको उनका उपयोग करने के बारे में सुसंगत होना चाहिए या नहीं। अंदर (())वे आवश्यक नहीं हैं। हालाँकि, वे echoबयानों में हैं।
अगली सूचना तक रोक दिया गया।

मैं लिनक्स के साथ बहुत अच्छा नहीं हूं, मैंने आपके कोड को केवल आवश्यकतानुसार संशोधित किया है। यह मूल रूप से आपका कोड है
kaan yılmaz

कोड के लिए धन्यवाद, यह बहुत अच्छा है।
स्मिटरलिंक

12

मूल संदर्भ जोड़ने के लिए:

आप विशेष पैरामीटर से तर्कों की संख्या प्राप्त कर सकते हैं $#। मान का अर्थ है "कोई तर्क नहीं"। $#केवल पढ़ने के लिए है।

जब shiftतर्क प्रसंस्करण के लिए संयोजन में उपयोग किया जाता है , तो $#हर बार बैश बिलिन shiftनिष्पादित होने पर विशेष पैरामीटर को घटाया जाता है।

अनुभाग 3.4.2 विशेष पैरामीटर में बैश संदर्भ मैनुअल देखें :

  • "शेल कई मापदंडों को विशेष रूप से मानता है। इन मापदंडों को केवल संदर्भित किया जा सकता है "

  • और कीवर्ड $ # के लिए इस अनुभाग में "दशमलव में स्थितीय मापदंडों की संख्या का विस्तार करता है।"


-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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.