Envsubst'ta SHELL-FORMAT nedir?


20

Ben tökezledi zaman envsubstsadece belirli değişkenler değiştirilmesi ve KABUK-FORMAT parametresi aranıyor ama işe alamadım ne olabilir şüpheli için kullanmak istedi.

Ne yazık ki, manve infosayfaları herhangi bir kullanım örneği vermiyor ve sadece

Bir SHELL-FORMAT verilirse, yalnızca SHELL-FORMAT içinde başvurulan ortam değişkenleri değiştirilir

Bu bana nasıl başvuracağımı söylemiyor.

Yanıtlar:


20

Metinde de belirtildiği üzere, sadece (örn referansa sahip $VARNAMEveya ${VARNAME}bir olağan kabuk komutu gibi değişkenler). Ancak, kabuğun bunları önceden genişletmediğinden emin olmalısınız.

İşte bunu gösteren bazı örnekler (varsayalım export FOO=BAR):

$ echo '$FOO$FOO2' | envsubst
BAR

Gördüğünüz gibi, tanımlanmadığı için $ FOO2 yerine "" getirildi. Şimdi bu değiştirmeyi yalnızca $ FOO ile sınırlayabiliriz:

$ echo '$FOO$FOO2' | envsubst '$FOO'
BAR$FOO2

""yerine kullanmak istenmeden ''önce ikameye yol açacaktır:

echo '$FOO$FOO2' | envsubst "$FOO"
$FOO$FOO2

(Bu, envsubst "BAR"hiçbir değişkeni algılamadığından hiçbirinin değiştirilmediği etkili çağrı anlamına gelir.)

Gibi mansayfalık söyledi başvurulan tüm değişkenler SHELL-FORMATbile bunu yapabilirsiniz, böylece değiştirilir:

echo '$FOO$FOO2$FOO3' | envsubst '$FOO some more text ${FOO3}'
BAR$FOO2

Gördüğünüz gibi SHELL-FORMAT, oldukça esnektir.

Son olarak, parametre aşağıdakilerle --variablesdeğiştirilmek üzere hangi değişkenlerin seçildiğini değerlendirmenizi sağlar SHELL-FORMAT:

envsubst --variables '$FOO some more text ${FOO3}'
FOO
FOO3

Yukarıdaki erken ikame örneğinde bu hatayı gösterecektir:

$ envsubst --variables "$FOO"
(empty string returned)

Belirtildiği gibi manPAGE, envsubstne zaman bir stdinput işlemez --variablesmevcuttur.


8

İşte nasıl düzgün kullanılacağını anlamama yardımcı olan bazı örnekler. Parametrede bahsedilen değişkenlerin envubstonly'nin yerini alması şaşırtıcıydı.

$ export FOOX="foox"
$ export FOOY="fooy"
$ export FOOZ="fooz"

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst            
x foox y fooy z fooz

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX'
x foox y $FOOY z $FOOZ

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX $FOOZ'
x foox y $FOOY z fooz

$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOZ $FOOY'
x $FOOX y fooy z fooz

SHELL-FORMAT'ın ne anlama geldiğini anlamadım, hala neden böyle adlandırıldığını bilmiyorum. Ancak yukarıdaki deneylerden sonra ne yaptığını biliyorum.


Bu, bu örneği okuduktan sonra bana çok yardımcı oluyor, insan yardımı ve bilgisinden, sadece SHELL-FORMAT'ın var olduğunu biliyorum, ancak nasıl beyan edeceğinizi bilmiyorum!
zw963

1

Bu söz biraz karışık. Yardım metnini daha titizlikle yeniden yazmak için:

SHELL-FORMATortam değişkenlerine referanslar içeren isteğe bağlı bir metin komut satırı bağımsız değişkenidir. Metindeki bir ortam değişkenine başvurmak için, değişken adının önüne a ekleyin $. Örneğin: Hello $FOO World $BARreferans ortam değişkenleri FOOve BAR. Dizenin geri kalanı yoksayılır. SHELL-FORMATKomut satırı bağımsız değişkeni varsa, stdin aracılığıyla alınan metinde değişken değiştirme gerçekleştiğinde, SHELL-FORMATkomut satırı bağımsız değişkeninde başvurulan değişkenlerle sınırlandırılır .

Sorunuzu açıkça cevaplamak için: Değişken adının önüne ön ek uygulayın $.

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.