GNU/Linux >> Linux Esercitazione >  >> Linux

Sostituisci le variabili di ambiente nel testo se esistono

Puoi usare env per vedere tutte le variabili di ambiente attualmente definite e quindi utilizzare quell'elenco per sostituirle solo. (La pagina man non è molto chiara su questo, ma vedi questa risposta per chiarimenti.)

echo 'Hello $USER $UNKNOWN' | envsubst "$(env | cut -d= -f1 | sed -e 's/^/$/')"

(L'output di env elenca anche i valori delle variabili, ma envsubst vuole anche vedere un $ in testa , quindi non possiamo semplicemente usare cut -d= -f1 da solo, purtroppo. Potresti usare un singolo sed fare cut anche il lavoro di , vedere la revisione precedente, ma preferisco la chiarezza di cut rispetto a un piccolo guadagno in termini di prestazioni.)


Se passi un argomento come $USER$PATH a envsubst , quindi espande solo quelle variabili a cui si fa riferimento in quell'argomento.

Quindi un modo potrebbe essere quello di passargli tutte le variabili di ambiente attualmente definite in quel formato. Con zsh :

echo 'Hello $USER ${USER} $UNDEFINED_VARIABLE' |
  envsubst \$${(kj:$:)parameters[(R)*export*]}
  • $parameters è uno speciale array associativo che associa i nomi delle variabili al loro tipo
  • $parameters[(R)*export*] si espande a tutti gli elementi dell'array associativo il cui valore contiene export .
  • con il k flag di espansione del parametro, la chiave invece del valore viene restituito
  • j:$: unisce questi elementi con $ in mezzo, e ne aggiungiamo uno all'inizio.

Con altre shell, puoi sempre tornare a perl per ottenere quell'elenco:

echo 'Hello $USER ${USER} $UNDEFINED_VARIABLE' |
  envsubst "$(perl -e 'print "\$$_" for grep /^[_a-zA-Z]\w*$/, keys %ENV')"

Fai attenzione a non rivelare la tua variabile d'ambiente nomi nell'output di ps .

Invece, potresti anche fare tutto in perl :

perl -pe 's{(?|\$\{([_a-zA-Z]\w*)\}|\$([_a-zA-Z]\w*))}{$ENV{$1}//$&}ge'

Attenzione, ha le stesse limitazioni come envsubst in quanto non espanderà cose come ${VAR:-x} e espanderebbe $HOME in cose come \$HOME o $$HOME cosa che una shell non farebbe.


Linux
  1. envsubst:comando non trovato

  2. Controllo delle variabili di ambiente

  3. Variabili d'ambiente nei collegamenti simbolici

  4. Imposta un ambiente temporaneo ($PATH)

  5. Come annullare l'impostazione di molte variabili d'ambiente

Come impostare la variabile d'ambiente in Windows

Come impostare le variabili d'ambiente in MacOS

Come impostare ed elencare le variabili di ambiente in Linux

Come impostare e annullare l'impostazione delle variabili di ambiente su Linux

Guida dettagliata alle variabili d'ambiente Linux

Variabili d'ambiente Linux