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!