Zur Verdeutlichung: Anders als argcin C-ähnlichen Sprachen $#wird es sein, 0wenn keine Argumente an das Skript übergeben werden, 1wenn es ein Argument gibt usw.
Vladimir Panteleev
99
#!/bin/bash
echo "The number of arguments is: $#"
a=${@}
echo "The total length of all arguments is: ${#a}: "
count=0for 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.
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$#
i+1
in der Variablen speichern ,i
wenn Argumente vorhanden sind.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
quelle
argc
in C-ähnlichen Sprachen$#
wird es sein,0
wenn keine Argumente an das Skript übergeben werden,1
wenn es ein Argument gibt usw.quelle
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 denecho
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 Builtinshift
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."
quelle
Unten ist die einfache -
cat countvariable.sh
Ausgabe :
quelle
echo "$@" | awk '{print NF}'
Dieser Wert ist in der Variablen enthalten
$#
quelle
$#