📜 Создание динамических переменных на Bash |

📜 Создание динамических переменных на Bash

Мануал

Конечно, можно использовать это для удаления кучи условий if, когда есть несколько наборов переменных env для разных окружений.

Подход, который мы будем использовать, совместим с Bash 3.2+, что очень удобно, если вы хотите, чтобы он работал “из коробки” на macOS.

#!/usr/bin/env bash

set -o errexit
set -o pipefail
set -o nounset

# Представьте, что у вас есть несколько переменных окружения для нескольких сред, таких как.
# как TEST, STAGING и PROD. Обычно они существуют в файле .env и
# передаются с помощью `. .env", я оставил их здесь, чтобы они были самостоятельными.
export TEST_API_KEY="abc123"
export STAGING_API_KEY="def456"
export PROD_API_KEY="ghi789"

# Теперь представьте, что у вас есть shell-скрипт, где первым аргументом является env, с которым вы
# с которым вы хотите работать, например, `./demo TEST ...` или `./demo PROD ...`.
ENV="${1}"

# И теперь вы хотите использовать значение API_KEY конкретного окружения.
# переменной. На данный момент не имеет значения, из какого окружения она получена.
API_KEY="${ENV}_API_KEY"

# Здесь мы можем получить доступ как к имени переменной, так и к ее значению. Вы можете захотеть
# использовать любой из них в зависимости от вашего случая
echo "${API_KEY}=${!API_KEY}"

Если бы вы запустили этот скрипт вот так ./demo TEST, то получили бы в ответ API_KEY=abc123.

Использование ${!API_KEY} называется косвенным расширением.

Это описано в официальной документации по Bash.

Без использования динамических переменных вы можете решить ту же проблему, но вы можете написать код, который выглядит следующим образом:

if [ "${ENV}" == "TEST" ]; then
  API_KEY="${TEST_API_KEY}"
elif [ "${ENV}" == "STAGING" ]; then
  API_KEY="${STAGING_API_KEY}"
elif [ "${ENV}" == "PROD" ]; then
  API_KEY="${PROD_API_KEY}"
else
  echo "Invalid environment!" && exit 1
fi

Теперь, если вы прочтете echo “${API_KEY}”, то получите abc123, если ENV=”TEST”.

Не то чтобы приведенный выше код был ужасен.

Можно привести доводы в пользу того, что он более прост, но он может быстро стать менее удобным для обслуживания.

Если у вас есть куча переменных окружения, я думаю, что использование динамических переменных является более чистым решением, оно уменьшает количество дублирований при объявлении одной и той же переменной для каждого окружения.

Выше приведен лишь один из примеров использования динамических переменных.

см. также:

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий