1) Я бы рекомендовал максимально избегать переменных окружения.
Плюсы переменных окружения
Недостатки переменных окружения
Мое мнение
They are global and accessible from anywhere, which is less elegant from architectural point of view, but limits the amount of code
напоминает мне об обоснованиях использования глобальных переменных;) . Мои шрамы из первых рук испытывают ужасы перегрузки окружающей среды
2 ) Ограничения
Если бы я нажимал пределы того, что может удерживать командная строка, или то, что может обрабатывать среда, я бы реорганизовал немедленно.
Я использовал JSON в прошлое для приложения с командной строкой, для которого потребовалось много параметров. Было очень удобно использовать словари и списки, а также строки и номера. Приложение заняло всего несколько аргументов командной строки, одним из которых было расположение файла JSON.
Преимущества этого подхода
What won't fit into command line parameters?
), такие как списки Примечание. Я хочу отличить это от подхода .config-file - это не для хранения пользовательская конфигурация. Может быть, я должен назвать это «параметром командной строки», потому что я использую его для программы, для которой требуется множество значений, которые не подходят хорошо в командной строке.
3 ) Переносимость решения: я не очень разбираюсь в различиях между Mac, ПК и Linux в отношении переменных окружения и аргументов командной строки, но могу вам сказать:
Да, я знаю - это было не очень полезно. Прости. Но ключевым моментом является то, что вы можете ожидать, что разумное решение будет переносимым, хотя вы определенно хотите проверить это для своих программ (например, являются ли аргументы командной строки аргументами с учетом регистра на любых платформах? На всех платформах? Я не знаю ).
Одна последняя точка:
Как отметил Томаш, это не имеет значения для большинства приложений, в которых были получены параметры.