web-dev-qa-db-fra.com

Comment changer un argument de ligne de commande dans Bash?

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"
80
Sriram

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}".

124
thkala

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.

21
Johnsyweb