Argv[] n'est pas stdin.
Les habituel est d'éviter complètement l'indexation et d'itérer sur le fichier valeurs directement (en gros, comment for..in
est censé fonctionner en premier lieu). La variable spéciale "tableau" représentant tous les arguments est "$@"
- Oui, les guillemets sont nécessaires pour que l'expansion du tableau se fasse correctement :
for v in "$@"; do
echo "Got $v"
done
(Ne le faites pas avec $*
ni avec les entreprises non cotées $@
car les deux vont perturber les args contenant des espaces).
Toutefois, si vous faire ont également besoin d'index, la syntaxe correcte de "déréférencement" en bash est la suivante ${!i}
:
for (( i = 1; i <= $#; i++ )); do
echo "Item $i is ${!i}"
done
(Notez la syntaxe de type C nécessaire pour itérer sur une plage numérique. Bien qu'il soit possible de faire estático gammes en utilisant for i in {1..10}
qui malheureusement ne fonctionne pas lorsque des variables comme {1..$#}
commencer à s'impliquer. Mais vous pouvez utiliser for i in $(seq 1 $#)
si vous n'êtes pas gêné par le sous-processus supplémentaire).
Enfin, l'une des méthodes les plus anciennes consiste à répéter les opérations suivantes shift
la liste des arguments :
while [ "${1+yes}" ]; do
echo "Got $1"
shift
done
Les ${var+string}
est utilisée pour vérifier si la variable est fixé à n'importe quelle valeur au lieu de vérifier si les chaînes de caractères ne sont pas de longueur nulle. Vous pouvez parfois voir cette méthode simplifiée pour une vérification plus directe - ce qui est bien tant que vous êtes sûr à 100% qu'il n'y aura pas d'arguments de longueur nulle :
while [ "$1" ]; do
echo "Got $1"
shift
done