Risposte:
Devi resettare tutti gli argomenti. Per cambiare ad esempio $3:
$ set -- "${@:1:2}" "new" "${@:4}"
Fondamentalmente imposti tutti gli argomenti ai loro valori correnti, ad eccezione di quelli che desideri modificare. set --è specificato anche da POSIX 7 .
La "${@:1:2}"notazione è espansa ai due (da qui 2la notazione nella notazione) argomenti posizionali a partire da offset 1(cioè $1). È un'abbreviazione per "$1" "$2"in questo caso, ma è molto più utile quando si desidera sostituire ad es "${17}".
Ottimizzando la leggibilità e la manutenibilità, potrebbe essere meglio assegnare $1e $2a variabili più significative (non lo so, input_filename = $1e output_filename = $2o qualcosa del genere) e poi sovrascrivere una di quelle variabili ( input_filename = 'chintz'), lasciando invariato l'input allo script, nel caso lo sia necessario altrove.