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!