As indicated by the text, you just have to reference (e.g. by $VARNAME
or ${VARNAME}
) the variables as in a usual shell command. However, you have to make sure that the shell does not expand them beforehand.
Here are some examples to illustrate this (assuming export FOO=BAR
):
$ echo '$FOO$FOO2' | envsubst
BAR
As you can see, $FOO2 has been replaced by "" as it was not defined. Now we can restrict that replacement to only $FOO by:
$ echo '$FOO$FOO2' | envsubst '$FOO'
BAR$FOO2
using ""
instead of ''
would lead to substitution before it is wanted:
echo '$FOO$FOO2' | envsubst "$FOO"
$FOO$FOO2
(This amounts to the effective call envsubst "BAR"
which detects no variables so none are replaced.)
As the man
-page said, all variables that are referenced in SHELL-FORMAT
are replaced, so we can even do this:
echo '$FOO$FOO2$FOO3' | envsubst '$FOO some more text ${FOO3}'
BAR$FOO2
As you can see, the SHELL-FORMAT
is quite flexible.
Finally, the parameter --variables
allows you to evaluate which variables are selected for substitution by the SHELL-FORMAT
:
envsubst --variables '$FOO some more text ${FOO3}'
FOO
FOO3
In the premature substitution example from above this would have shown the error:
$ envsubst --variables "$FOO"
(empty string returned)
As stated in the man
-page, envsubst
does not process any stdinput when --variables
is present.
This help me a lot after read those example, from man help and info, only know SHELL-FORMAT exist, but don't know how to declare it! – zw963 – 2018-09-21T15:12:00.780