回答:
呼び出す前に、envsubst
一重引用符を使用したエクスポートを使用して、VAR_1
変更を元に戻す必要があります。次のように:
export VAR_1='somevalue'
詳細については、以下を参照してください。
マニュアルページごと:
envsubst [OPTION] [SHELL-FORMAT]
SHELL-FORMATが指定されている場合、SHELL-FORMATで参照されている環境変数のみが置換されます。それ以外の場合、標準入力で発生するすべての環境変数参照が置き換えられます。
SHELL-FORMAT文字列は、「フォーム内のシェル変数への参照を含む文字列$variable
または${variable}
[...]変数名は、数字またはアンダースコアASCII文字のみで構成する必要があり、数字で始まって空ではない必要があります。無視されます。」。
そのため、それぞれの変数名をenvsubst
シェル形式の文字列で渡す必要があります(明らかに、文字通りに渡されるようにエスケープ/引用符で囲む必要がありますenvsubst
)。例:
入力ファイル例infile
:
VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}
のようないくつかの値
export VAR1="one" VAR2="two" VAR3="three"
その後実行
envsubst '${VAR1} ${VAR3}' <infile
または
envsubst '${VAR1},${VAR3}' <infile
または
envsubst '${VAR1}
${VAR3}' <infile
出力
VAR1=one
VAR2=${VAR2}
VAR3=three
または、バックスラッシュを好む場合:
envsubst \$VAR1,\$VAR2 <infile
生産する
VAR1=one
VAR2=two
VAR3=${VAR3}
envsubst "$(printf '${%s} ' ${!PREFIX*})" < infile
SUBST_VARS
場合:envsubst "$(printf '${%s} ' $SUBST_VARS)" < infile