Yalnızca belirli değişkenleri envsubst ile değiştirme


53

Ortam değişken değişimini gerçekleştirmeye çalışıyorum envsubst, ancak yalnızca belirli değişkenleri değiştirmek istiyorum.

Belgelerden envsubstyalnızca belirli değişkenleri değiştirmeyi söyleyebilmeliyim , ancak bunu yapamıyorum.

Örneğin, aşağıdakileri içeren bir dosyam varsa:

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

envsubstsadece başvuruyu değiştirecek şekilde nasıl yürütmeliyim ${VAR_1}?

Yanıtlar:



130

Erkek sayfası başına:

envsubst [OPTION] [SHELL-FORMAT]

Bir SHELL-FORMAT verilirse, yalnızca SHELL-FORMAT'ta referans verilen ortam değişkenleri değiştirilir; Aksi halde, standart girdilerde meydana gelen tüm ortam değişkenleri referansları değiştirilir.

SHELL-FORMAT karakter dizileri " $variableveya formdaki kabuk değişkenlere referansları olan dizeler" olduğunda, ${variable}değişken isimleri yalnızca bir rakam ile başlayıp boş olmayan, ASCII karakterlerinden oluşan alfanümerik veya alt çizgi karakterlerinden oluşmalıdır; görmezden geldi." .
Bu nedenle, bir kişi ilgili değişken isimlerini envsubstbir kabuk formatı dizgisine iletmek zorundadır (açıkçası, kelimenin tam anlamıyla geçmeleri için alıntılanmaları / alıntılanmaları gerekir envsubst). Örnek:

giriş dosyası örneğin infile:

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

ve bazı değerler

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

sonra koşuyor

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

veya

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

veya

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

çıktılar

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

Veya ters eğik çizgi tercih ederseniz:

envsubst \$VAR1,\$VAR2 <infile

üretir

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

13
neden bu cevap kabul edilmedi?
Qsiris

3
Evet bu doğru cevap!
Thomas Decaux

3
İkame edilebilecek değişkenleri sınırlandırmak için kullanılacak bir değişken öneki biliyorsanız:envsubst "$(printf '${%s} ' ${!PREFIX*})" < infile
Sam Liddicott

Ya da bunların bir listesini varsa SUBST_VARSo zaman:envsubst "$(printf '${%s} ' $SUBST_VARS)" < infile
Sam Liddicott 15
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.