Есть ли способ достичь этого с помощью одной команды?
eval
ваш враг:
SENDER_PASSWORD=$(eval echo \${${BUILD_ENV}_SENDER_PASSWORD})
// or better, with quoting
SENDER_PASSWORD=$(eval echo "\"\${${BUILD_ENV}_SENDER_PASSWORD}\"")
Использование расширения косвенной переменной bash способ безопаснее, но это будет два выражения:
SENDER_PASSWORD=$(tmp=${BUILD_ENV}_SENDER_PASSWORD; printf "%s" "${!tmp}")
Если посмотреть на цель вашего дизайна, я бы обернул ее в функцию (давайте это сделаем!):
get_var() {
local tmp
tmp=${BUILD_ENV}_$1
# ex. add if [ -z "${!tmp}" ]; then use some default value
printf "%s\n" "${!tmp}"
}
SENDER_PASSWORD=$(get_var SENDER_PASSWORD)