Как указано в тексте, вы просто должны ссылаться (например, с помощью $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
сказано в -page, все переменные, на которые есть ссылки 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
-page, envsubst
не обрабатывает stdinput, когда --variables
присутствует.
Словоблеск немного путаница. Чтобы более тщательно перефразировать текст справки:
Итак, чтобы ответить на ваш вопрос в явном виде: префикс имени переменной с
$
.источник