103 votes

Changer un argument en ligne de commande - bash

Est-il possible de changer les arguments de la ligne de commande dans un script bash? Par exemple, un script bash est appelé de la manière suivante:

 ./foo arg1 arg2  
 

Existe-t-il un moyen de changer la valeur de arg1 dans le script? Dis quelque chose comme

 $1="chintz"  
 

Merci,
Sriram

162voto

thkala Points 36148

Vous devez réinitialiser tous les arguments. Pour modifier par exemple, $3:

$ set -- "${@:1:2}" "new" "${@:4}"

EDIT:

Fondamentalement, vous avez défini tous les arguments de leurs valeurs actuelles, à l'exception de celle(s) que vous souhaitez modifier.

L' "${@:1:2}" notation est élargi pour les deux (d'où l' 2 de la notation) des arguments de position à partir de l'offset 1 (c - $1). C'est un raccourci pour "$1" "$2" dans ce cas, mais il est beaucoup plus utile lorsque vous souhaitez remplacer, par exemple, "${17}".

25voto

Johnsyweb Points 45395

Vous feriez mieux d’affecter $1 et $2 à des variables plus significatives (je ne sais pas, input_filename = $1 et output_filename = $2 ou quelque chose) et écrasez ensuite l'une de ces variables ( input_filename = 'chintz' ), laissant l'entrée du script inchangée, au cas où vous en auriez besoin par ailleurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X