Как указано в тексте, вам просто нужно ссылаться (например, $VARNAME
или ${VARNAME}
) на переменные, как в обычной команде оболочки. Однако вы должны убедиться, что оболочка не раскрывает их заранее.
Вот несколько примеров, чтобы проиллюстрировать это (при условии export FOO=BAR
):
$ echo '$FOO$FOO2' | envsubst
BAR
Как видите, $ FOO2 был заменен на "", поскольку он не был определен. Теперь мы можем ограничить эту замену только $ FOO:
$ echo '$FOO$FOO2' | envsubst '$FOO'
BAR$FOO2
использование ""
вместо ''
приведет к замене до того, как это будет необходимо:
echo '$FOO$FOO2' | envsubst "$FOO"
$FOO$FOO2
(Это соответствует эффективному вызову envsubst "BAR"
который не обнаруживает никаких переменных, поэтому ни одна из них не заменяется.)
Как сказано на странице man
, все переменные, на которые есть ссылки в SHELL-FORMAT
, заменены, поэтому мы можем даже сделать это:
echo '$FOO$FOO2$FOO3' | envsubst '$FOO some more text ${FOO3}'
BAR$FOO2
Как видите, SHELL-FORMAT
довольно гибок.
Наконец, параметр --variables
позволяет вам оценить, какие переменные выбраны для подстановки SHELL-FORMAT
:
envsubst --variables '$FOO some more text ${FOO3}'
FOO
FOO3
В приведенном выше примере преждевременной замены это показало бы ошибку:
$ envsubst --variables "$FOO"
(empty string returned)
Как указано на странице man
, envsubst
не обрабатывает никакой ввод stdinput, когда присутствует --variables
.