web-dev-qa-db-ja.com

特定の変数のみをenvsubstで置き換える

envsubstを使用して環境変数の置換を実行しようとしていますが、特定の変数のみを置換したいと思います。

ドキュメントから、特定の変数のみを置き換えるようにenvsubstに指示できるはずですが、そうすることができません。

たとえば、次のファイルがあるとします。

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

どのようにenvsubstを実行すれば、${VAR_1}への参照のみが置き換えられますか?

62
João Angelo

envsubstを呼び出す前に、VAR_1を変更するために、単一引用符を使用してエクスポートを使用する必要があります。のように:

export VAR_1='somevalue'

詳細については、以下を参照してください。

複雑なテキストファイルでシェル変数を置き換える方法

3
Rui F Ribeiro

Manページごと:

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}
156
don_crissti