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.