How can I change a command line argument in Bash?

You have to reset all arguments. To change, e.g., argument $3:

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

Basically you set all arguments to their current values, except for the one(s) that you want to change. set -- is also specified by POSIX 7.

The "${@:1:2}" notation is expanded to the two (hence the 2 in the notation) positional arguments, starting from offset 1 (i.e. $1). It is a shorthand for "$1" "$2" in this case, but it is much more useful when you want to replace, e.g., "${17}".

Leave a Comment