Sostituendo solo variabili specifiche con envsubst


54

Sto cercando di eseguire la sostituzione delle variabili di ambiente envsubst, ma voglio solo sostituire variabili specifiche.

Dalla documentazione dovrei essere in grado di dire envsubstdi sostituire solo determinate variabili ma non riesco a farlo.

Ad esempio, se ho un file contenente:

VAR_1=${VAR_1}
VAR_2=${VAR_2}

come devo eseguire in envsubstmodo che sostituisca solo il riferimento a ${VAR_1}?

Risposte:



131

Per la pagina man:

envsubst [OPTION] [SHELL-FORMAT]

Se viene fornito un SHELL-FORMAT, vengono sostituite solo le variabili d'ambiente a cui fa riferimento SHELL-FORMAT; in caso contrario vengono sostituiti tutti i riferimenti alle variabili di ambiente che si verificano nell'input standard.

Dove stringhe SHELL-FORMAT sono "stringhe con riferimenti a variabili shell nella forma $variableo ${variable}[...] I nomi delle variabili devono essere costituiti esclusivamente da caratteri alfanumerici o di sottolineatura, non devono iniziare con una cifra e non sono vuoti, altrimenti tale riferimento a variabile è ignorato." .
Quindi, si devono passare i rispettivi nomi delle variabili envsubstin una stringa di formato shell (ovviamente, devono essere salvati / quotati in modo da essere passati letteralmente a envsubst). Esempio:

file di input, ad esempio infile:

VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}

e alcuni valori come

export  VAR1="one" VAR2="two" VAR3="three"

poi correndo

envsubst '${VAR1} ${VAR3}' <infile

o

envsubst '${VAR1},${VAR3}' <infile

o

envsubst '${VAR1}
${VAR3}' <infile

uscite

VAR1=one
VAR2=${VAR2}
VAR3=three

Oppure, se preferisci la barra rovesciata:

envsubst \$VAR1,\$VAR2 <infile

produce

VAR1=one
VAR2=two
VAR3=${VAR3}

14
perché questa non è la risposta accettata?
Qsiris,

3
Sì, questa è la risposta giusta!
Thomas Decaux,

3
Se conosci un prefisso variabile da utilizzare per limitare le variabili che possono essere sostituite:envsubst "$(printf '${%s} ' ${!PREFIX*})" < infile
Sam Liddicott

O se ne hai un elenco SUBST_VARSallora:envsubst "$(printf '${%s} ' $SUBST_VARS)" < infile
Sam Liddicott il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.