Comment changer un argument de ligne de commande dans Bash?

Est-il possible de modifier 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 

Est-il possible de changer la valeur de arg1 dans le script? Dis, quelque chose comme

 $1="chintz" 

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

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

Fondamentalement, vous définissez tous les arguments sur leurs valeurs actuelles, à l’exception de celles que vous souhaitez modifier. set -- est également spécifié par POSIX 7 .

La notation "${@:1:2}" est étendue aux deux arguments positionnels (et donc à 2 dans la notation) à partir du décalage 1 (soit $1 ). C’est un raccourci pour "$1" "$2" dans ce cas, mais c’est beaucoup plus utile lorsque vous voulez remplacer par exemple "${17}" .

En optimisant la lisibilité et la maintenabilité, il vaut peut-être mieux atsortingbuer $1 et $2 à des variables plus significatives (je ne sais pas, input_filename = $1 et output_filename = $2 ou quelque chose) , en laissant l’entrée au script inchangée, au cas où il serait nécessaire ailleurs.