Dans mon script bash, je voudrais analyser zéro, un ou deux paramètres (le script peut les reconnaître), puis transmettre les paramètres restants à une commande invoquée dans le script. Comment puis je faire ça?
Dans mon script bash, je voudrais analyser zéro, un ou deux paramètres (le script peut les reconnaître), puis transmettre les paramètres restants à une commande invoquée dans le script. Comment puis je faire ça?
Réponses:
Utilisez la shiftcommande intégrée pour «manger» les arguments. Appelez ensuite le processus enfant et transmettez-lui l' "$@"argument pour inclure tous les arguments restants. Remarquez les guillemets, ils doivent être conservés, car ils provoquent une extension de la liste d'arguments correctement citée.
$@traite essentiellement chaque élément du tableau comme une chaîne entre guillemets - ils sont transmis sans possibilité d'expansion. Cela garantit également que chacun est considéré comme un mot distinct. Cette explication avec un script de test démontrant la différence est ici: tldp.org/LDP/abs/html/internalvariables.html#APPREF
bash utilise la commande shift :
par exemple shifttest.sh:
#!/bin/bash
echo $1
shift
echo $1 $2
shifttest.sh 1 2 3 produit
1
2 3
$1sans les citer comme "$1", alors le shell effectuera le fractionnement des mots, donc par exemple foo barsera transmis comme fooet barséparément.
Bash prend en charge les paramètres de sous - ensembles (voir Sous- ensembles et sous-chaînes ), vous pouvez donc choisir les paramètres à traiter / transmettre comme ceci.
ouvrez un nouveau fichier et modifiez-le: vim r.sh:
echo "params only 2 : ${@:2:1}"
echo "params 2 and 3 : ${@:2:2}"
echo "params all from 2: ${@:2:99}"
echo "params all from 2: ${@:2}"exécuter:
$ chmod u+x r.sh
$ ./r.sh 1 2 3 4 5 6 7 8 9 10le résultat est:
params only 2 : 2
params 2 and 3 : 2 3
params all from 2: 2 3 4 5 6 7 8 9 10
params all from 2: 2 3 4 5 6 7 8 9 10