Pour clarifier: contrairement argcaux langages de type C, ce $#sera 0s'il n'y a pas d'arguments passés au script, 1s'il y a un argument, etc.
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"
Cela m'a aidé aussi, ce que j'essayais de faire est; #! / bin / bash count = 0 sum = 0 avg = 0 for var in "$ @" do ((sum + = $ var)) ((count ++)) done ((avg = sum / $ count)) echo " la somme des nombres est: $ sum "echo" la moyenne des nombres est: $ avg "ce qui m'aide à obtenir des nombres inconnus d'arguments et à faire des maths (vous pouvez éditer l'opérande) Merci pour Dennis Williamson, je l'ai fait. Je poste sur du code parce que cela peut être utile pour quelqu'un.
kaan yılmaz
1
@ kaanyılmaz: Le seul problème avec cela est que Bash ne fait que l'arithmétique entière. Si vous voulez des décimales, vous devrez utiliser AWK, bcou autre chose (ksh93 et zsh peuvent également faire des calculs décimaux). Votre code inclut des signes dollar pour certaines variables, mais pas pour d'autres. Vous devez être cohérent sur leur utilisation ou non. À l'intérieur, (())ils ne sont pas nécessaires. Ils sont, cependant, dans les echodéclarations.
Suspendu jusqu'à nouvel ordre.
Je ne suis pas très bon avec Linux, je viens de modifier votre code selon mes besoins. C'est essentiellement votre code
kaan yılmaz
Merci pour le code, c'est très bien.
Smeterlink
12
pour ajouter la référence d'origine:
Vous pouvez obtenir le nombre d'arguments à partir du paramètre spécial $#. La valeur 0 signifie "aucun argument". $#est en lecture seule.
Lorsqu'il est utilisé avec shiftpour le traitement des arguments, le paramètre spécial $#est décrémenté chaque fois que Bash Builtin shiftest exécuté.
i+1
dans la variablei
si des arguments sont présents.Réponses:
Le nombre d'arguments est
$#
Recherchez-le sur cette page pour en savoir plus: http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
la source
argc
aux langages de type C, ce$#
sera0
s'il n'y a pas d'arguments passés au script,1
s'il y a un argument, etc.la source
bc
ou autre chose (ksh93 et zsh peuvent également faire des calculs décimaux). Votre code inclut des signes dollar pour certaines variables, mais pas pour d'autres. Vous devez être cohérent sur leur utilisation ou non. À l'intérieur,(())
ils ne sont pas nécessaires. Ils sont, cependant, dans lesecho
déclarations.pour ajouter la référence d'origine:
Vous pouvez obtenir le nombre d'arguments à partir du paramètre spécial
$#
. La valeur 0 signifie "aucun argument".$#
est en lecture seule.Lorsqu'il est utilisé avec
shift
pour le traitement des arguments, le paramètre spécial$#
est décrémenté chaque fois que Bash Builtinshift
est exécuté.voir le manuel de référence de Bash dans la section 3.4.2 Paramètres spéciaux :
"Le shell traite plusieurs paramètres spécialement. Ces paramètres ne peuvent être référencés "
et dans cette section pour le mot-clé $ # "S'étend au nombre de paramètres de position en décimal."
la source
Ci-dessous est le plus facile -
chat countvariable.sh
Production :
la source
echo "$@" | awk '{print NF}'
cette valeur est contenue dans la variable
$#
la source
$#