Чи є спосіб змінити аргументи командного рядка в сценарії 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'
), залишивши вхід до скрипта незмінним, якщо це так потрібні в іншому місці.