как указано в тексте, вы просто должны ссылаться (например,$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
присутствует.