Solución:
Según la página del manual:
envsubst [OPTION] [SHELL-FORMAT]
Si se proporciona un SHELL-FORMAT, solo se sustituyen las variables de entorno a las que se hace referencia en SHELL-FORMAT; de lo contrario, se sustituyen todas las referencias de variables de entorno que aparecen en la entrada estándar.
Donde están las cadenas SHELL-FORMAT “cadenas con referencias a variables de shell en el formulario $variable
o ${variable}
[…] Los nombres de las variables deben constar únicamente de caracteres ASCII alfanuméricos o subrayados, no comenzar con un dígito y no estar vacíos; de lo contrario, se ignorará dicha referencia de variable. “.
Entonces, uno tiene que pasar los nombres de las variables respectivas a envsubst
en una cadena de formato de shell (obviamente, deben escaparse / citarse para pasar literalmente a envsubst
). Ejemplo:
archivo de entrada, por ejemplo infile
:
VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}
y algunos valores como
export VAR1="one" VAR2="two" VAR3="three"
luego corriendo
envsubst '${VAR1} ${VAR3}' <infile
o
envsubst '${VAR1},${VAR3}' <infile
o
envsubst '${VAR1}
${VAR3}' <infile
salidas
VAR1=one
VAR2=${VAR2}
VAR3=three
O, si prefiere la barra invertida:
envsubst $VAR1,$VAR2 <infile
produce
VAR1=one
VAR2=two
VAR3=${VAR3}