मुझे बैश स्क्रिप्ट में दी गई तर्कों की संख्या कैसे मिलेगी?
वर्तमान में मेरे पास यही है:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
क्या ऐसा करने के अन्य (बेहतर) तरीके हैं?
मुझे बैश स्क्रिप्ट में दी गई तर्कों की संख्या कैसे मिलेगी?
वर्तमान में मेरे पास यही है:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
क्या ऐसा करने के अन्य (बेहतर) तरीके हैं?
जवाबों:
तर्कों की संख्या है $#
अधिक जानने के लिए इस पेज पर इसे खोजें: http://tldp.org/LDP/abs/html/internalvariables.html.html खोज
argcसी-लाइक भाषाओं के विपरीत , $#यह होगा 0कि क्या स्क्रिप्ट में कोई तर्क पारित नहीं 1होता है , अगर एक तर्क है, आदि
#!/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"
bc, या कुछ और (ksh93 और zsh दशमलव गणित भी कर सकते हैं) का उपयोग करने की आवश्यकता होगी । आपके कोड में कुछ चर के लिए डॉलर के संकेत शामिल हैं, लेकिन अन्य नहीं। आपको उनका उपयोग करने के बारे में सुसंगत होना चाहिए या नहीं। अंदर (())वे आवश्यक नहीं हैं। हालाँकि, वे echoबयानों में हैं।
मूल संदर्भ जोड़ने के लिए:
आप विशेष पैरामीटर से तर्कों की संख्या प्राप्त कर सकते हैं $#। मान का अर्थ है "कोई तर्क नहीं"। $#केवल पढ़ने के लिए है।
जब shiftतर्क प्रसंस्करण के लिए संयोजन में उपयोग किया जाता है , तो $#हर बार बैश बिलिन shiftनिष्पादित होने पर विशेष पैरामीटर को घटाया जाता है।
अनुभाग 3.4.2 विशेष पैरामीटर में बैश संदर्भ मैनुअल देखें :
"शेल कई मापदंडों को विशेष रूप से मानता है। इन मापदंडों को केवल संदर्भित किया जा सकता है "
और कीवर्ड $ # के लिए इस अनुभाग में "दशमलव में स्थितीय मापदंडों की संख्या का विस्तार करता है।"
नीचे एक आसान है -
बिल्ली 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
echo "$@" | awk '{print NF}'
i+1को चर में संग्रहीत करेगाi।