Můžete použít env zobrazit všechny aktuálně definované proměnné prostředí a poté použít tento seznam pouze k jejich nahrazení. (Manuální stránka v tom není příliš jasná, ale pro vysvětlení viz tato odpověď.)
echo 'Hello $USER $UNKNOWN' | envsubst "$(env | cut -d= -f1 | sed -e 's/^/$/')"
 
 (Výstup env uvádí také hodnoty proměnných, ale envsubst také chce vidět úvodní $ , takže nemůžeme použít pouze cut -d= -f1 sama o sobě, bohužel. Můžete použít jeden sed udělat cut práce také, viz předchozí revize, ale preferuji jasnost cut přes nepatrný nárůst výkonu.)
 Pokud předáte argument jako $USER$PATH až envsubst , pak rozšíří pouze ty proměnné, na které se v tomto argumentu odkazuje.
 Jedním ze způsobů by tedy mohlo být předat mu všechny aktuálně definované proměnné prostředí v tomto formátu. S zsh :
echo 'Hello $USER ${USER} $UNDEFINED_VARIABLE' |
  envsubst \$${(kj:$:)parameters[(R)*export*]}
 $parametersje speciální asociativní pole, které mapuje názvy proměnných na jejich typ$parameters[(R)*export*]expanduje na všechny prvky asociativního pole, jehož hodnota obsahujeexport.- se znakem 
kpříznak rozšíření parametru, klíč místo hodnoty je vráceno j:$:spojí tyto prvky pomocí$mezi tím a jeden přidáme na začátku.
 S jinými shelly se můžete vždy vrátit k perl získat tento seznam:
echo 'Hello $USER ${USER} $UNDEFINED_VARIABLE' |
  envsubst "$(perl -e 'print "\$$_" for grep /^[_a-zA-Z]\w*$/, keys %ENV')"
 
 Dejte pozor, aby obě prozradily názvy proměnných prostředí ve výstupu ps .
 Místo toho můžete také provést celou věc v perl :
perl -pe 's{(?|\$\{([_a-zA-Z]\w*)\}|\$([_a-zA-Z]\w*))}{$ENV{$1}//$&}ge'
 
 Pozor, má stejná omezení jako envsubst v tom, že nerozšíří věci jako ${VAR:-x} a expandovalo by $HOME ve věcech jako \$HOME nebo $$HOME což by shell neudělal.