Uma função não pode afetar os parâmetros posicionais de seu chamador. Isso ocorre por design: parâmetros posicionais são destinados a serem particulares para a função.
Faça sua função funcionar em uma matriz.
myfunction () {
local _myfunction_arrayname=$1
shift
… # work on the positional parameters
eval "$_myfunction_arrayname=(\"\$@\")"
}
myfunction foo "$@"
set -- "${foo[@]}"
No ksh93 e no bash, há uma maneira indireta de fazer algo que se aproxime combinando um alias e o . ( source ) embutido com uma substituição de processo. Exemplo .
alias myfunction='. <(echo myfunction_body \"\$@\"; echo set -- "\"\${new_positional_parameters[@]}\"")'
Coloque a parte do trabalho da função em myfunction_body e defina a matriz new_positional_parameters . Após uma chamada para myfunction , os parâmetros posicionais são definidos para os valores que myfunction_body coloca em new_positional_parameters .