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?
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?
Antworten:
Die Anzahl der Argumente ist $#
Suchen Sie auf dieser Seite danach, um mehr zu erfahren: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
argcin C-ähnlichen Sprachen $#wird es sein, 0wenn keine Argumente an das Skript übergeben werden, 1wenn es ein Argument gibt usw.
#!/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"
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.
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."
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
echo "$@" | awk '{print NF}'
i+1in der Variablen speichern ,iwenn Argumente vorhanden sind.