2010-12-12 9 views
131

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

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

#!/bin/bash 
i=0 
for var in "[email protected]" 
do 
    i=i+1 
done 

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

+3

कि कोड केवल शाब्दिक स्ट्रिंग 'मैं चर' मैं 'घ यदि कोई तर्क मौजूद हैं 1' + संग्रहीत करेंगे। – Philipp

+0

@TheConstructor: केवल ओपी के रिकॉर्ड को देखें, यानि 5.5 साल के करीब 2 पद और केवल कर्म का निष्क्रिय संचय (जिसमें से 9 5% इस प्रश्न पर)। मुझे सच में नहीं लगता कि उसे एक सक्रिय उपयोगकर्ता माना जा सकता है या वह मदद करने वाले किसी भी व्यक्ति को स्वीकार्य उत्तर देने के बारे में एक झुकाव हुड देता है। उनका सवाल पूरी तरह से वैध था हालांकि यह उन लोगों की मदद करता था जिनके पास 'मैन बाश' करने में अभ्यास की कमी नहीं थी। तो, जीने और रहने दो ;-) – Cbhihe

+0

@ कबीही मैंने सोचा कि मैं फिर कोशिश करूँगा। ओपी अभी भी पढ़ रहा है और अधिसूचना देख सकता है। मुझे "असामान्य नायक" -बज मिला और आमतौर पर मेरे उत्तर को स्वीकार करने के ओपी को याद दिलाने की कोशिश नहीं करता। अभी भी गर्व होगा, अगर उनमें से एक अंततः मेरा जवाब स्वीकार करेगा, हालांकि। – TheConstructor

उत्तर

219

तर्क की संख्या है इस पृष्ठ पर इसके लिए $#

खोजें अधिक जानने के लिए: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST

+14

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

82
#!/bin/bash 
echo "The number of arguments is: $#" 
a=${@} 
echo "The total length of all arguments is: ${#a}: " 
count=0 
for var in "[email protected]" 
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" 
+4

+1 काम करने के लिए उदाहरण! अच्छा – MountainX

+0

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

+1

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

-4

कि मूल्य चर $#

+2

तथ्य यह है कि 4 साल पुराना सटीक (लेकिन सही) उत्तर है, आपका उत्तर गलत है - यह '$ #' – nachteil

1

नीचे में निहित है आसान एक है -

बिल्ली countvariable.sh

echo "[email protected]" |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 
+0

होना चाहिए 'echo "$ @" के रूप में लिखा जा सकता है। अजीब '{प्रिंट एनएफ}' ' – user000001

संबंधित मुद्दे

 संबंधित मुद्दे