Например, у вас есть .env-файл с переменными и паролем для postgres DB. Как вы знаете, пароль должен быть ур-кодированным курсом% sing in password. Поэтому у нас есть проблема. Поскольку BASH игнорирует $, и мы всегда получаем неверный пароль для кодирования.
DB_NAME=sone_db DB_PASS=A1$Bb%!Y$ # with dollar signs ...
#!/bin/bash PSQL_COMMAND="DROP schema public CASCADE;" PSQL_COMMAND+="CREATE schema public;" set -o allexport # set source file and get access to all variables in .env source /path/.env ENCODED_PASS=$(python -c "from urllib.parse import quote; print(quote('$DB_PASS'))"); psql postgres://$DB_USER:$ENCODED_PASS@$DB_HOST:5432/$DB_NAME -c "$PSQL_COMMAND" echo $DB_PASS # returns A1%!Y$ echo '$DB_PASS' # returns $DB_PASS echo "$DB_PASS" # returns A1%!Y$ # disables variables set +o allexport # Wont work because BASH find $ sing in string and think that is variable, so in first and last echo missed part $Bb%
Для этого вам необходимо в .env escape-строке файла в одиночной кавычки
... DB_PASS='A1$Bb%!Y$' ...