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
argc
in C-ähnlichen Sprachen $#
wird es sein, 0
wenn keine Argumente an das Skript übergeben werden, 1
wenn 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"
bc
oder 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 echo
Aussagen.
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 shift
für die Argumentverarbeitung wird der spezielle Parameter $#
jedes Mal dekrementiert, wenn Bash Builtin shift
ausgefü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+1
in der Variablen speichern ,i
wenn Argumente vorhanden sind.