Чи є спосіб змінити аргументи командного рядка в сценарії Bash. Скажімо, наприклад, сценарій Bash викликається наступним чином:
./foo arg1 arg2
Чи є спосіб змінити значення arg1 у сценарії? Скажімо, щось на зразок
$1="chintz"
Відповіді:
Ви повинні скинути всі аргументи. Щоб змінити, наприклад $3:
$ set -- "${@:1:2}" "new" "${@:4}"
В основному ви встановлюєте для всіх аргументів їх поточні значення, за винятком тих, які потрібно змінити. set --також визначається POSIX 7 .
"${@:1:2}"Позначення розширюється до двох (отже, 2в позначеннях) позиційні аргументи , починаючи від зсуву 1(тобто $1). У "$1" "$2"цьому випадку це скорочення , але набагато корисніше, коли ви хочете замінити, наприклад "${17}".
Оптимізуючи для читабельності та ремонтопридатності, вам може бути краще призначити $1і $2більш значущі змінні (я не знаю, input_filename = $1і output_filename = $2щось інше), а потім перезаписати одну з цих змінних ( input_filename = 'chintz'), залишивши вхід до скрипта незмінним, якщо це так потрібні в іншому місці.