Вы не можете изменить значения аргументов, так как они передаются по ссылке в функциях bash.
Лучшее, что вы можете сделать, - это передать аргументы, которые вы хотите обработать, и вернуть те, которые еще не обработаны.
Что-то в строках:
process_arguments() {
# process the arguments
echo "original arguments : $@"
local new_arguments=(a c)
echo ${new_arguments[@])
}
new_arguments=$(process_arguments a b c)
set -- $new_arguments
Если вам не нужна проблема «подоболочки», вы можете использовать глобальную переменную:
arguments=""
process_arguments() {
# process the arguments
echo "original arguments : $@"
local new_arguments=(a c)
arguments="${new_arguments[@]}"
}
process_arguments a b c # no subshell
set -- $arguments
Как подсказывает @ruakh, вы можете также использовать arguments
в качестве массива, например:
arguments=()
process_arguments() {
# process the arguments
echo "original arguments : $@"
local new_arguments=(a c)
arguments=( "${new_arguments[@]}" )
}
process_arguments a b c # no subshell
set -- "${arguments[@]}"