2010-12-12 9 views
131

Wie finde ich die Anzahl der Argumente, die an ein Bash-Skript übergeben werden?Wie finde ich die Anzahl der Argumente, die an ein Bash-Skript übergeben werden?

Das ist, was ich habe zur Zeit:

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

Gibt es andere (bessere) Möglichkeiten dies zu tun?

+3

Dieser Code würde einfach speichern Sie die Zeichenkette 'i + 1 'in der Variablen' I' wenn alle Argumente vorhanden sind. – Philipp

+0

@TheConstructor: Schaut euch einfach die OP-Aufzeichnungen an, d. H. 2 Beiträge in knapp 5,5 Jahren und nur passive Akkumulation von Karma (95% davon in dieser Frage). Ich glaube wirklich nicht, dass er als aktiver Benutzer angesehen werden kann oder dass er einem jeden, der ihm geholfen hat, eine hemmungslose Absage gibt, eine akzeptierte Antwort anzukreuzen. Seine Frage war jedoch vollkommen legitim und es half anderen, die einen ähnlichen Mangel an Übung hatten, "Mann-Bash" zu machen. Also, lebe und lass es leben ;-) – Cbhihe

+0

@Cbhihe Ich dachte ich versuche es damals. OP liest möglicherweise noch und sieht die Benachrichtigung. Ich habe "unusung hero" -Badge bekommen und versuche normalerweise nicht OPs daran zu erinnern, meine Antwort zu akzeptieren. Wäre trotzdem stolz, wenn einer von ihnen meine Antwort endlich akzeptieren würde. – TheConstructor

Antwort

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 für eine Arbeit Beispiel! schön – MountainX

+0

Es hat mir auch geholfen, was ich versuchte zu tun ist; #!/Bin/bash count = 0 sum = 0 avg = 0 für var in "$ @" tun ((sum + = $ var)) ((count ++)) getan ((avg = sum/$ count)) echo "Summe der Zahlen ist: $ sum" echo "Durchschnitt der Zahlen ist: $ avg" was mir hilft, unbekannte Anzahl von Argumenten zu bekommen und etwas Mathe (Sie können bearbeite den Operanden) Danke für Dennis Williamson, ich habe es geschafft. Ich poste, um zu kodieren, weil es für jemand nützlich sein kann. –

+1

@ kaanyılmaz: Das einzige Problem dabei ist, dass Bash nur Integer-Arithmetik ausführt. Wenn Sie Dezimalzahlen benötigen, müssen Sie AWK, 'bc' oder etwas anderes verwenden (ksh93 und zsh können auch Dezimalzahlen berechnen). Ihr Code enthält Dollarzeichen für einige Variablen, aber nicht für andere. Sie sollten konsistent sein, sie zu verwenden oder nicht. Innerhalb '(())' sind sie nicht notwendig. Sie sind jedoch in den echo-Anweisungen enthalten. –

-4

dieser Wert in der Variablen $#

+2

Neben der Tatsache gibt es fast genau die gleiche (aber richtige) Antwort, die 4 Jahre alt ist, ist Ihre Antwort falsch - es sollte '$ #' – nachteil

1

Im Folgenden enthalten ist, die leicht -

cat countvariable.sh

echo "[email protected]" |awk '{for(i=0;i<=NF;i++); print i-1 }' 

Ausgang:

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

Könnte als 'Echo "$ @" geschrieben werden awk '{print NF}' – user000001

Verwandte Themen