Измените аргумент командной строки в Bash

Есть ли способ изменить аргументы командной строки в Bash script. Скажем, например, Bash script вызывается следующим образом:

./foo arg1 arg2  

Есть ли способ изменить значение arg1 в script? Скажем, что-то вроде

$1="chintz"

Ответы

Ответ 1

Вы должны reset все аргументы. Для изменения, например. $3:

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

В основном вы set все аргументы к их текущим значениям, за исключением тех, которые вы хотите изменить.

Обозначение "${@:1:2}" расширяется до двух (следовательно, 2 в обозначении) позиционных аргументов, начиная со смещения 1 (т.е. $1). Это сокращение для "$1" "$2" в этом случае, но оно намного более полезно, когда вы хотите заменить, например. "${17}".

Ответ 2

Вам лучше назначить $1 и $2 более значимые переменные (я не знаю, input_filename = $1 и output_filename = $2 или что-то еще), а затем перезаписать одну из этих переменных (input_filename = 'chintz'), оставив вход в script не изменился, если он понадобится в другом месте.