Quand jutilise la commande bash shift
, cela change-t-il le nombre darguments dans $#
?
Note de lauteur: Quand jai eu cette question, je ne lai pas (encore) trouvée sur cette communauté. Par conséquent, jai simplement essayé et jai obtenu ma réponse. Parce que je pensais que cela pourrait aider les autres, jai publié ce que jai appris ici sous la forme une question à réponse individuelle .
Réponse
Oui, cest explicitement requis dans la norme :
shift [n]
Les paramètres de position doivent être décalés. Le paramètre de position 1 se voit attribuer la valeur du paramètre (1 + n), […] et le paramètre «#» est mis à jour pour refléter le nouveau nombre de paramètres.
Considérez ce script:
#!/usr/bin/env bash echo "$#" shift echo "$#"
En lappelant comme script-file first second third
affichera 3
suivi de 2
.
Cela signifie que nous pouvons le faire des choses comme:
#!/usr/bin/env bash while [[ "$#" > 0 ]] ; do echo "$1" shift done
… qui afficherait les arguments un par un sur leur propre ligne.
Commentaires
- … ou lisez la norme qui dit " … le paramètre ' # ' est mis à jour pour refléter le nouveau nombre de paramètres de position. "
- Ce dernier extrait de code pourrait être remplacé par
printf '%s\n' "$@"
oufor arg do echo "$arg"; done
. Cependant, cela ne ferait évidemment pas usage deshift
, ne produirait que la même sortie.