Comment trouver le nombre d'arguments transmis à un script Bash?
Voici ce que j'ai actuellement:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Y a-t-il d'autres (meilleures) façons de faire cela?
Comment trouver le nombre d'arguments transmis à un script Bash?
Voici ce que j'ai actuellement:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Y a-t-il d'autres (meilleures) façons de faire cela?
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
argc
aux langages de type C, ce $#
sera 0
s'il n'y a pas d'arguments passés au script, 1
s'il y a un argument, etc.
#!/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
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 les echo
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 Builtin shift
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."
Ci-dessous est le plus facile -
chat countvariable.sh
echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'
Production :
#./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
dans la variablei
si des arguments sont présents.