Templateファイル

シェル変数が書かれたファイルを読み込み変数展開できれば、Templateファイルのように使える。

次のようなファイルがあるとする。

$ cat template.txt
Hello, ${name}!
Bye, ${name}!

変数nameに値を入れてtemplate.txtを読み込むことで、様々なファイルを出力したい。

evalを使う方法

ファイルにかかれた変数を展開する方法の一つとして、evalを使うやり方がある。

$ name=Bash
$ eval "echo \"$(cat template.txt)\""
Hello, Bash!
Bye, Bash!

template.txtを読み込んだ内容をechoし、evalに渡すと、シェルとして解釈してくれるため、変数が展開される。echoするものをひとつの文字列にするため"でくくらなければならない点に注意。

echoのかわりにヒアストリングを使っても書ける。

$ eval "cat <<< \"$(cat template.txt)\""

envsubstを使う方法

環境変数によって置換してくれるenvsubstを使う方法もある。

$ cat template.txt | name=Bash envsubst
Hello, Bash!
Bye, Bash!