Je voudrais écrire un script bash avec une quantité inconnue d'arguments.
Comment puis-je parcourir ces arguments et en faire quelque chose?
Une mauvaise tentative ressemblerait à ceci:
#!/bin/bash
for i in $args; do
echo $i
done
Il existe une syntaxe spéciale pour cela:
for i do
printf '%s\n' "$i"
done
Plus généralement, la liste des paramètres du script ou de la fonction courante est disponible via la variable spéciale $@
.
for i in "$@"; do
printf '%s\n' "$i"
done
Notez que vous avez besoin des guillemets doubles $@
, sinon les paramètres subissent une expansion générique et une division de champ. "$@"
est magique: malgré les doubles guillemets, il se développe en autant de champs qu'il y a de paramètres.
print_arguments () {
for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special !\characters' '-n' # prints 4 lines
print_arguments '' # prints one empty line
print_arguments # prints nothing
#! /usr/bin/env bash
for f in "$@"; do
echo "$f"
done
Vous devez citer $@
car il est possible que les arguments contiennent des espaces (ou des retours à la ligne, etc.) si vous les citez ou les échappez avec un \
. Par exemple:
./myscript one 'two three'
C'est deux arguments plutôt que trois, en raison des citations. Si vous ne citez pas $@
, ces arguments seront décomposés dans le script.
for f; do ...