Respostas:
Você tem que redefinir todos os argumentos. Para mudar, por exemplo $3
:
$ set -- "${@:1:2}" "new" "${@:4}"
Basicamente, você configura todos os argumentos com seus valores atuais, exceto aquele (s) que deseja alterar. set --
também é especificado por POSIX 7 .
A "${@:1:2}"
notação é expandida para os dois (daí os 2
na notação) argumentos posicionais começando do deslocamento 1
(isto é $1
). É uma abreviação de "$1" "$2"
neste caso, mas é muito mais útil quando você deseja substituir, por exemplo "${17}"
.
Otimizando para legibilidade e manutenção, você pode ser melhor atribuir $1
e $2
para variáveis mais significativas (eu não sei, input_filename = $1
e output_filename = $2
ou algo assim) e, em seguida, sobrescrever uma dessas variáveis ( input_filename = 'chintz'
), deixando a entrada para o script inalterada, caso seja necessário em outro lugar.