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


182

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

Folgendes habe ich derzeit:

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

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


4
Dieser Code würde einfach die Literalzeichenfolge i+1in der Variablen speichern , iwenn Argumente vorhanden sind.
Philipp

Antworten:



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"

Es hat mir auch geholfen, was ich versucht habe zu tun; #! / bin / bash count = 0 sum = 0 avg = 0 für var in "$ @" do ((sum + = $ var)) ((count ++)) done ((avg = sum / $ count)) echo " Die Summe der Zahlen ist: $ sum "echo" Durchschnitt der Zahlen ist: $ avg ", was mir hilft, unbekannte Zahlen von Argumenten zu erhalten und etwas zu rechnen (Sie können den Operanden bearbeiten). Danke für Dennis Williamson, ich habe es getan. Ich poste in Code, weil es für jemanden nützlich sein kann.
Kaan Yılmaz

1
@ kaanyılmaz: Das einzige Problem dabei ist, dass Bash nur ganzzahlige Arithmetik macht. Wenn Sie Dezimalstellen möchten, müssen Sie AWK bcoder etwas anderes verwenden (ksh93 und zsh können auch Dezimalrechnungen durchführen). Ihr Code enthält Dollarzeichen für einige Variablen, andere jedoch nicht. Sie sollten konsequent sein, ob Sie sie verwenden oder nicht. Im Inneren sind (())sie nicht notwendig. Sie sind jedoch in den echoAussagen.
Bis auf weiteres angehalten.

Ich bin nicht sehr gut mit Linux, ich habe nur Ihren Code nach Bedarf geändert. Es ist im Grunde Ihr Code
kaan yılmaz

Danke für den Code, es ist sehr gut.
Smeterlink

12

um die ursprüngliche Referenz hinzuzufügen:

Die Anzahl der Argumente können Sie dem speziellen Parameter entnehmen $#. Der Wert 0 bedeutet "keine Argumente". $#ist schreibgeschützt.

In Verbindung mit shiftfür die Argumentverarbeitung wird der spezielle Parameter $#jedes Mal dekrementiert, wenn Bash Builtin shiftausgeführt wird.

siehe Bash-Referenzhandbuch in Abschnitt 3.4.2 Spezielle Parameter :

  • "Die Shell behandelt mehrere Parameter speziell. Auf diese Parameter darf nur verwiesen werden. "

  • und in diesem Abschnitt für das Schlüsselwort $ # "Wird auf die Anzahl der Positionsparameter in Dezimalzahl erweitert."


-1

Unten ist die einfache -

cat countvariable.sh

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

Ausgabe :

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

3
Könnte geschrieben werden alsecho "$@" | awk '{print NF}'
user000001

-6

Dieser Wert ist in der Variablen enthalten $#


4
Abgesehen von der Tatsache, dass es fast genau die gleiche (aber richtige) Antwort gibt, die 4 Jahre alt ist, ist Ihre Antwort falsch - es sollte sein$#
wird
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.