Подтвердить что ты не робот

Есть ли escape-символ для envsubst?

Есть ли способ предотвратить envsubst от замены $VARIABLE? Например, я бы ожидал чего-то вроде:

export THIS=THAT
echo "dont substitute \\\$THIS" | envsubst

и вернуть его

dont substitute $THIS

но вместо этого я получаю

dont substitute \THAT

есть ли какой-либо escape-символ для этого?

4b9b3361

Ответ 1

export DOLLAR='$'

export THIS=THAT
echo '${DOLLAR}THIS' | envsubst

Или более ясно:

export THIS=THAT
echo '${DOLLAR}THIS' | DOLLAR='$' envsubst

Ответ 2

Если вы даете envsubst список переменных, он заменяет только эти переменные, игнорируя другие подстановки. Я не совсем уверен, как это работает, но что-то вроде следующего, похоже, делает то, что вы хотите:

$ export THIS=THAT FOO=BAR
$ echo 'dont substitute $THIS but do substitute $FOO' | envsubst '$FOO'
dont substitute $THIS but do substitute BAR

Обратите внимание, что $THIS остается одним, но $FOO заменяется на BAR.

Ответ 3

Если вы используете envsubst для Docker или вам не нравится его поведение, вы можете попробовать мое решение для замены переменных env в файлах: https://github.com/roquie/smalte

Ответ 4

В моем случае я хотел избежать только тех переменных, которые еще не определены. Для этого запустите:

envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')"