環境変数の交換をしてみたいのですが、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