#!/usr/bin/env bash trim_env_whitespace() { local value="$1" value="${value#"${value%%[![:space:]]*}"}" value="${value%"${value##*[![:space:]]}"}" printf '%s' "${value}" } load_env_file() { local env_file="$1" local raw_line="" local normalized="" local key="" local value="" local trimmed_value="" local quote_char="" [[ -f "${env_file}" ]] || return 1 while IFS= read -r raw_line || [[ -n "${raw_line}" ]]; do raw_line="${raw_line%$'\r'}" normalized="$(trim_env_whitespace "${raw_line}")" if [[ -z "${normalized}" || "${normalized:0:1}" == "#" ]]; then continue fi if [[ "${normalized}" == export\ * ]]; then normalized="${normalized#export }" fi if [[ "${normalized}" != *=* ]]; then continue fi key="$(trim_env_whitespace "${normalized%%=*}")" if [[ -z "${key}" ]]; then continue fi value="${normalized#*=}" trimmed_value="$(trim_env_whitespace "${value}")" if [[ ${#trimmed_value} -ge 2 ]]; then quote_char="${trimmed_value:0:1}" if [[ ( "${quote_char}" == "'" || "${quote_char}" == '"' ) && "${trimmed_value: -1}" == "${quote_char}" ]]; then value="${trimmed_value:1:${#trimmed_value}-2}" else value="${trimmed_value}" fi else value="${trimmed_value}" fi printf -v "${key}" '%s' "${value}" export "${key}" done < "${env_file}" }