Pour ce qui est de ./script.sh arg1 [arg2 arg3 ...]
, les arguments de la ligne de commande arg1
, arg2
, ... peut être obtenu par $1
, $2
, ... Mais le nombre d'arguments est PAS fixe.
Dans le script Shell, je veux passer les arguments à partir de arg2
à un programme,
#/bin/bash
...
/path/to/a/program [I want to pass arg2 arg3 ... to the program]
...
Comment pourrais-je le faire car il pourrait y avoir un ou plusieurs arguments?
La manière habituelle serait d'enregistrer une copie de arg1 ("$1"
) et décaler les paramètres par un, vous pouvez donc vous référer à la liste entière comme "$@"
:
#!/bin/sh
arg1="$1"
shift 1
/path/to/a/program "$@"
bash a un support de tableau bien sûr, mais il n'est pas nécessaire pour la question posée.
Si même arg1 est facultatif, vous devriez le vérifier comme ceci:
if [ $# != 0 ]
then
arg1="$1"
shift 1
fi
Vous pouvez découper les paramètres positionnels en utilisant l'expansion des paramètres. La syntaxe est:
${parameter:offset:length}
Si length
est omis, il est pris comme jusqu'à la dernière valeur.
Comme vous deviez passer de l'avant-dernier argument, vous avez besoin de:
${@:2}
Exemple:
$ foo() { echo "${@:2}" ;}
$ foo bar spam Egg
spam Egg