Привет. Я в свободное время для рабочих целей пишу один проект, который состоит из кучи bash-скриптов. Есть одна точка входа, которая из cli принимает аргументы. Этот скрипт подключает остальные куски функционала через source. В этих кусках описаны функции, которые должны обрабатывать разные аргументы, нужные только для чего-то конкретного.
В первой версии проекта я просто явно передавал $1, $2, $N
сверху вниз, в другие функции. Это было топорным решением, и оно работало, потому что возможные аргументы и их порядок был известен и прост. Но эстетически это было отвратительно. Чтобы мне было приятно смотреть на код, нужно было сильно усложнить вообще всё, чтобы всё стало намного проще.
Итак, я должен принимать от пользователя разные аргументы в разные функции, при этом я хочу дать пользователю возможность передать на вход:
- длинные аргументы без значений:
./script.sh --foo --bar
- длинные аргументы со значениями:
./script.sh --foo=bar
- короткие аргументы без значений:
./script.sh -a -b -c
- короткие аргументы со значениями:
./script.sh -a avalue -b bvalue
- комбинировать короткие любые короткие аргументы в одно слово:
./script.sh -abc bvalue
- всё перечисленное выше — одновременно!
- порядок аргументов не должен иметь значения
- иметь доступ к любому из них откуда угодно в любой момент времени.