回答:
テキストで示されているように、通常のシェルコマンドのように変数を参照する(たとえば、$VARNAME
または${VARNAME}
)だけで済みます。ただし、シェルがそれらを事前に展開しないことを確認する必要があります。
これを説明するための例をいくつか示します(想定export FOO=BAR
)。
$ echo '$FOO$FOO2' | envsubst
BAR
ご覧のとおり、$ FOO2は定義されていないため、 ""に置き換えられています。次の方法で、置換を$ FOOのみに制限できます。
$ echo '$FOO$FOO2' | envsubst '$FOO'
BAR$FOO2
""
代わりに使用すると、''
必要になる前に置換が行われます。
echo '$FOO$FOO2' | envsubst "$FOO"
$FOO$FOO2
(これenvsubst "BAR"
は、変数を検出しない有効な呼び出しに相当するため、置換される変数はありません。)
以下のようman
-pageが言った、で参照されているすべての変数がSHELL-FORMAT
置き換えられているので、私たちもこれを行うことができます:
echo '$FOO$FOO2$FOO3' | envsubst '$FOO some more text ${FOO3}'
BAR$FOO2
ご覧のとおり、これSHELL-FORMAT
は非常に柔軟です。
最後に、このパラメーターを--variables
使用すると、置換用に選択される変数を評価できますSHELL-FORMAT
。
envsubst --variables '$FOO some more text ${FOO3}'
FOO
FOO3
上記の時期尚早の置換の例では、これはエラーを示しているはずです。
$ envsubst --variables "$FOO"
(empty string returned)
man
-pageで述べたように、stdinput が存在するenvsubst
場合--variables
は処理しません。
適切に使用する方法を理解するのに役立ついくつかの例を次に示します。envsubstonlyがパラメーターで言及された変数を置き換えることは私にとって驚きでした。
$ 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の意味も理解できませんでしたが、なぜそのような名前が付けられているのかまだわかりません。しかし、上記の実験の後、私はそれが何をするか知っていると思います。
言葉遣いは少し混乱しています。ヘルプテキストをより細かく言い換えるには:
SHELL-FORMAT
環境変数への参照を含むオプションのテキストコマンドライン引数です。テキスト内の環境変数を参照するには、変数名の前に$
。を付けます。たとえば、Hello $FOO World $BAR
環境変数FOO
とを参照しますBAR
。残りの文字列は無視されます。SHELL-FORMAT
コマンドライン引数が存在する場合、stdinを介して受信したテキストで変数置換が発生すると、SHELL-FORMAT
コマンドライン引数で参照される変数に制限されます。
したがって、質問に明示的に答えるには、変数名の前にを付けます$
。