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.