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

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

環境変数の交換をしてみたいのですが、envsubst特定の変数だけを交換したいです。

ドキュメントにはenvsubst特定の変数だけを変更するように言えるはずですが、そうすることはできません。

たとえば、次のファイルを含む場合:

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

envsubstペアへの参照のみを置き換えるにはどうすればよいですか${VAR_1}

ベストアンサー1

マニュアルページによると:

envsubst [OPTION] [SHELL-FORMAT]

SHELL-FORMATを指定すると、SHELL-FORMATで参照されている環境変数のみが置き換えられます。それ以外の場合は、標準入力に表示されるすべての環境変数参照が置き換えられます。

SHELL-FORMAT文字列はどこにありますか?$variable" [...]形式のシェル変数の文字列参照変数名には、${variable}英数字またはアンダースコアASCII文字のみを含める必要があり、数字で始めることはできず、空ではありません。そうしないと、その変数参照は無視されます。"


この形式はサポートされ${VAR:-default}ていません。私は言及しましたこここれをサポートするいくつかの代替手段やその他の機能もあります。


とにかく、次に戻りますgettext envsubst
したがって、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}

カスタム設定変数が実行中のシェル環境に漏洩するのを防ぐには、これらの変数をエクスポートするのではなく、次の手順を実行します。いくつかの殻、例えば吹くプレフィックスコマンドの許可変数の割り当て。この方法で割り当てられた値はコマンドの実行にのみ使用され、後続のシェル環境には影響しません。

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

# ...

VAR1="number 1" VAR3="numero 3" envsubst '${VAR1} ${VAR3}' <infile

# output:
# VAR1=number 1
# VAR2=${VAR2}
# VAR3=numero 3

echo "VAR1=${VAR1}"
echo "VAR2=${VAR2}"
echo "VAR3=${VAR3}"
# output shows that the original environment was preserved:
# VAR1=one
# VAR2=two
# VAR3=three

おすすめ記事