Existe-t-il un moyen de modifier les arguments de ligne de commande dans un script Bash. Supposons par exemple qu'un script Bash soit invoqué de la manière suivante:
./foo arg1 arg2
Existe-t-il un moyen de modifier 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 set tous les arguments à leurs valeurs actuelles, à l'exception de celui (s) que vous souhaitez modifier. set --
est également spécifié par POSIX 7 .
Le "${@:1:2}"
notation est étendu aux deux (d'où le 2
dans la notation) arguments positionnels à partir de l'offset 1
(c'est à dire. $1
). C'est un raccourci pour "$1" "$2"
dans ce cas, mais il est beaucoup plus utile lorsque vous souhaitez remplacer par exemple "${17}"
.
En optimisant la lisibilité et la maintenabilité, vous feriez mieux d'affecter $1
et $2
vers des variables plus significatives (je ne sais pas, input_filename = $1
et output_filename = $2
ou quelque chose), puis en écrasant l'une de ces variables (input_filename = 'chintz'
), laissant l'entrée du script inchangée, au cas où elle serait nécessaire ailleurs.