Ответ 1
export DOLLAR='$'
export THIS=THAT
echo '${DOLLAR}THIS' | envsubst
Или более ясно:
export THIS=THAT
echo '${DOLLAR}THIS' | DOLLAR='$' envsubst
Есть ли способ предотвратить envsubst
от замены $VARIABLE
? Например, я бы ожидал чего-то вроде:
export THIS=THAT
echo "dont substitute \\\$THIS" | envsubst
и вернуть его
dont substitute $THIS
но вместо этого я получаю
dont substitute \THAT
есть ли какой-либо escape-символ для этого?
export DOLLAR='$'
export THIS=THAT
echo '${DOLLAR}THIS' | envsubst
Или более ясно:
export THIS=THAT
echo '${DOLLAR}THIS' | DOLLAR='$' envsubst
Если вы даете 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
.
Если вы используете envsubst
для Docker или вам не нравится его поведение, вы можете попробовать мое решение для замены переменных env в файлах: https://github.com/roquie/smalte
В моем случае я хотел избежать только тех переменных, которые еще не определены. Для этого запустите:
envsubst "$(env | sed -e 's/=.*//' -e 's/^/\$/g')"