Como indicado pelo texto, você só precisa referenciar (por exemplo, $VARNAME ou ${VARNAME} ) as variáveis como em um comando shell usual. No entanto, você precisa ter certeza de que o shell não os expanda antecipadamente.
Aqui estão alguns exemplos para ilustrar isso (assumindo export FOO=BAR ):
$ echo '$FOO$FOO2' | envsubst
BAR
Como você pode ver, $ FOO2 foi substituído por "" porque não foi definido. Agora podemos restringir essa substituição para apenas $ FOO por:
$ echo '$FOO$FOO2' | envsubst '$FOO'
BAR$FOO2
usando "" em vez de '' levaria a substituição antes de ser desejado:
echo '$FOO$FOO2' | envsubst "$FOO"
$FOO$FOO2
(Isso equivale à chamada efetiva envsubst "BAR" , que não detecta nenhuma variável, então nenhuma é substituída.)
Como a man -page disse, todas as variáveis referenciadas em SHELL-FORMAT são substituídas, então podemos até fazer isso:
echo '$FOO$FOO2$FOO3' | envsubst '$FOO some more text ${FOO3}'
BAR$FOO2
Como você pode ver, o SHELL-FORMAT é bastante flexível.
Finalmente, o parâmetro --variables permite avaliar quais variáveis são selecionadas para substituição pelo SHELL-FORMAT :
envsubst --variables '$FOO some more text ${FOO3}'
FOO
FOO3
No exemplo de substituição prematura acima, isso teria mostrado o erro:
$ envsubst --variables "$FOO"
(empty string returned)
Como afirmado em man -page, envsubst não processa nenhum stdinput quando --variables está presente.