Получить переменную среды из строки с пеплом

Рассмотрим следующее:

/ # echo $TEMPLATEGO_SERVICE_HOST
192.168.1.1
/ # export string="TEMPLATEGO_SERVICE_HOST"
/ # echo $string
TEMPLATEGO_SERVICE_HOST

С bash я могу сделать:

/ echo ${!string}
192.168.1.1

Если я попробую то же самое с пеплом, я получаю следующую ошибку:

/ # echo ${!string}
ash: syntax error: bad substitution

Я работаю внутри альпийского контейнера, и в качестве обходного пути я загружаю bash и использую его. Но хочу избежать дополнительного размера моего образа докера.


person CESCO    schedule 14.03.2016    source источник


Ответы (1)


Единственный способ сделать это в ash — использовать eval. Однако вы должны убедиться, что то, что вы пытаетесь оценить, состоит только из действительного идентификатора оболочки, чтобы избежать выполнения непреднамеренного кода из ненадежного значения. Например,

if echo "$string" | grep -q '^[a-zA-Z_][a-zA-Z0-9_]*$' "$string"; then
    eval echo \$$string
fi
person chepner    schedule 14.03.2016