Месяц: Май 2021

  • Обработка аргументов в bash-скриптах без getopt и getopts

    Привет. Я в свободное время для рабочих целей пишу один проект, который состоит из кучи 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
    • всё перечисленное выше — одновременно!
    • порядок аргументов не должен иметь значения
    • иметь доступ к любому из них откуда угодно в любой момент времени.
    (далее…)